C# 获取带路径的数组的文件大小
C# Get file size of array with paths
我是数组的新手,我想将多个文件的大小(以 MB 为单位)显示到一个文本框中。文件的路径在数组中。
var Files = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories);
我在另一个 post 中看到这段代码来获取文件的大小:
long length = new System.IO.FileInfo(file).Length;
如何将所有文件大小添加到 int/string 并将它们写入文本框?
如果我没理解错,请使用 Linq Select
and string.Join
var results = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories)
.Select(file => new FileInfo(file).Length);
TextBox1.Text = string.Join(", ", results);
如果你想求和,就用Enumerable.Sum
TextBox1.Text = $"{results.Sum():N3}";
更新
public static class MyExtension
{
public enum SizeUnits
{
Byte, KB, MB, GB, TB, PB, EB, ZB, YB
}
public static string ToSize(this Int64 value, SizeUnits unit)
{
return (value / (double)Math.Pow(1024, (Int64)unit)).ToString("0.00");
}
}
TextBox1.Text = results.Sum().ToSize();
如果您不想通过使用 LINQ 来增加复杂性并且想练习数组:
var Files = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories);
long length = 0;
for (int i = 0; i < Files.Length; i++)
{
length += new FileInfo(Files[i]).Length;
}
以下代码可能对您有用。
var FilesAndSizes = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories).Select(item => new KeyValuePair<string,int>(item, new System.IO.FileInfo(item).Length));
使用Directory.EnumerateFiles
,您可以计算总大小,而只需遍历数组一次。
获取扩展名所有文件的总大小:
long totalSizeInBytes = 0;
foreach(var file in Directory.EnumerateFiles(Path, "*" + filetype, SearchOption.AllDirectories))
{
totalSizeInBytes += new FileInfo(file).Length;
}
获取所有文件大小的列表:
var results = Directory.EnumerateFiles(Path, "*" + filetype, SearchOption.AllDirectories)
.Select(file => new FileInfo(file).Length);
TextBox1.Text = string.Join(", ", results);
我认为 DirectoryInfo 对象比 Directory 对象更聪明。
看看那个例子:
public static void Main()
{
string filetype = ".jpg";
// Make a reference to a directory.
DirectoryInfo di = new DirectoryInfo("c:\");
// Get a reference to each file in that directory.
FileInfo[] fiArr = di.GetFiles("*" + filetype, SearchOption.AllDirectories);
// Display the names and sizes of the files.
Console.WriteLine("The directory {0} contains the following files:", di.Name);
foreach (FileInfo f in fiArr)
Console.WriteLine("The size of {0} is {1} bytes.", f.Name, f.Length);
}
GetFiles 方法returns FileInfo 对象数组,您可以在其中找到文件大小。
参数:
在这个示例中,我正在写入控制台输出,但您可以使用相同的方式将文本添加到文本框。
mytexbox.Text += String.Format("The size of {0} is {1} bytes.\r\n", f.Name, f.Length);
我是数组的新手,我想将多个文件的大小(以 MB 为单位)显示到一个文本框中。文件的路径在数组中。
var Files = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories);
我在另一个 post 中看到这段代码来获取文件的大小:
long length = new System.IO.FileInfo(file).Length;
如何将所有文件大小添加到 int/string 并将它们写入文本框?
如果我没理解错,请使用 Linq Select
and string.Join
var results = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories)
.Select(file => new FileInfo(file).Length);
TextBox1.Text = string.Join(", ", results);
如果你想求和,就用Enumerable.Sum
TextBox1.Text = $"{results.Sum():N3}";
更新
public static class MyExtension
{
public enum SizeUnits
{
Byte, KB, MB, GB, TB, PB, EB, ZB, YB
}
public static string ToSize(this Int64 value, SizeUnits unit)
{
return (value / (double)Math.Pow(1024, (Int64)unit)).ToString("0.00");
}
}
TextBox1.Text = results.Sum().ToSize();
如果您不想通过使用 LINQ 来增加复杂性并且想练习数组:
var Files = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories);
long length = 0;
for (int i = 0; i < Files.Length; i++)
{
length += new FileInfo(Files[i]).Length;
}
以下代码可能对您有用。
var FilesAndSizes = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories).Select(item => new KeyValuePair<string,int>(item, new System.IO.FileInfo(item).Length));
使用Directory.EnumerateFiles
,您可以计算总大小,而只需遍历数组一次。
获取扩展名所有文件的总大小:
long totalSizeInBytes = 0;
foreach(var file in Directory.EnumerateFiles(Path, "*" + filetype, SearchOption.AllDirectories))
{
totalSizeInBytes += new FileInfo(file).Length;
}
获取所有文件大小的列表:
var results = Directory.EnumerateFiles(Path, "*" + filetype, SearchOption.AllDirectories)
.Select(file => new FileInfo(file).Length);
TextBox1.Text = string.Join(", ", results);
我认为 DirectoryInfo 对象比 Directory 对象更聪明。
看看那个例子:
public static void Main()
{
string filetype = ".jpg";
// Make a reference to a directory.
DirectoryInfo di = new DirectoryInfo("c:\");
// Get a reference to each file in that directory.
FileInfo[] fiArr = di.GetFiles("*" + filetype, SearchOption.AllDirectories);
// Display the names and sizes of the files.
Console.WriteLine("The directory {0} contains the following files:", di.Name);
foreach (FileInfo f in fiArr)
Console.WriteLine("The size of {0} is {1} bytes.", f.Name, f.Length);
}
GetFiles 方法returns FileInfo 对象数组,您可以在其中找到文件大小。
参数:
在这个示例中,我正在写入控制台输出,但您可以使用相同的方式将文本添加到文本框。
mytexbox.Text += String.Format("The size of {0} is {1} bytes.\r\n", f.Name, f.Length);