C#获取带有路径的数组的文件大小

时间:2018-08-08 06:32:25

标签: c# arrays file filesize

我是数组新手,我想在文本框中显示多个文件的大小(以MB为单位)。文件的路径在一个数组中。

var Files = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories);

我在另一篇文章中看到了此代码以获取文件的大小:

long length = new System.IO.FileInfo(file).Length;

如何将所有文件大小添加到int / string并将其写入textBox?

5 个答案:

答案 0 :(得分:7)

如果我对您的理解正确,只需使用 Linq Selectstring.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();

答案 1 :(得分:2)

如果您不想使用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;
}

答案 2 :(得分:0)

以下代码可能对您有用。

var FilesAndSizes = Directory.GetFiles(Path, "*" + filetype, SearchOption.AllDirectories).Select(item => new KeyValuePair<string,int>(item, new System.IO.FileInfo(item).Length));

答案 3 :(得分:0)

使用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);

答案 4 :(得分:0)

我认为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方法返回一个FileInfo对象数组,您可以在其中找到文件大小。

参数:

在这个示例中,我正在编写控制台输出,但是您可以使用相同的方式将文本添加到文本框中。

   mytexbox.Text += String.Format("The size of {0} is {1} bytes.\r\n", f.Name, f.Length);