我需要计算数百个文件夹的大小,有些将是10MB,有些可能是10GB,我需要一种使用C#获取每个文件夹大小的超快速方法.
我的最终结果有望成为:
Folder1 10.5GB
Folder2 230MB
Folder3 1.2GB
...
在.NET 4中,这个带有递归的Directory.EnumerateFiles()方法看起来很方便.
但是,如果在递归中发生异常,我如何继续/从中恢复并继续枚举其余文件?
try
{
var files = from file in Directory.EnumerateFiles("c:\\",
"*.*", SearchOption.AllDirectories)
select new
{
File = file
};
Console.WriteLine(files.Count().ToString());
}
catch (UnauthorizedAccessException uEx)
{
Console.WriteLine(uEx.Message);
}
catch (PathTooLongException ptlEx)
{
Console.WriteLine(ptlEx.Message);
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何在C#中获取目录大小(目录中的文件)?
在vbscript中,获取GB或MB的文件夹大小非常简单:
Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim fSize = CInt((oFSO.GetFolder(path).Size / 1024) / 1024)
WScript.Echo fSize
Run Code Online (Sandbox Code Playgroud)
在C#中,通过我的所有搜索,我可以想到的是对所有子文件夹中的每个文件大小进行冗长,复杂,递归的搜索,然后在最后添加它们.
没有其他办法吗?
我正在编写一个控制台应用程序,我希望它显示某个目录中所有文件的总大小,输出的一个例子就是这个
Files in: C:\Windows
Total files: 49
Total size of all files: 7121424 bytes
Run Code Online (Sandbox Code Playgroud)
这是我目前拥有的:
if (menuOption == "3")
{
Console.Clear();
Console.WriteLine("Files in C:\\windows");
Console.WriteLine("");
DirectoryInfo folderInfo = new DirectoryInfo("C:\\Windows");
FileInfo[] files = folderInfo.GetFiles();
for (numFiles = 0; numFiles < files.Length; numFiles++)
{
}
Console.Write("Total Files: {0}",numFiles);
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,我已经完成了它以便它获得C:\ Windows中的文件总量,但我不确定如何使它将所有文件大小加在一起.希望你们能给我一些见解,谢谢.