迭代文件夹和子文件夹的最佳方法
迭代文件夹和子文件夹以获取从指定位置开始的每个文件夹中的文件大小、文件总数和文件夹总大小的最佳方法是什么?
What's the best way to iterate folders and subfolders to get file size, total number of files, and total size of folder in each folder starting at a specified location?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您使用的是 .NET 4,您可能希望使用 System.IO.DirectoryInfo.EnumerateDirectories 和 System.IO.DirectoryInfo.EnumerateFiles 方法。如果您按照其他帖子的建议使用 Directory.GetFiles 方法,则方法调用将不会返回,直到检索到所有条目。如果您使用递归,这可能需要很长时间。
来自文档:
If you're using .NET 4, you may wish to use the
System.IO.DirectoryInfo.EnumerateDirectories
andSystem.IO.DirectoryInfo.EnumerateFiles
methods. If you use theDirectory.GetFiles
method as other posts have recommended, the method call will not return until it has retrieved ALL the entries. This could take a long time if you are using recursion.From the documentation:
使用Directory.GetFiles()。该页面的底部包含一个完全递归的示例。
注意:使用 .NET 4 及更高版本时,请使用下面 Chris Dunaway 的答案以获得更现代的方法。
Use Directory.GetFiles(). The bottom of that page includes an example that's fully recursive.
Note: Use Chris Dunaway's answer below for a more modern approach when using .NET 4 and above.
迭代所有目录子文件夹和文件,无论子文件夹和文件有多少。
然后从数组中,您可以通过循环或按照您想要的方式获得您想要的内容。
To iterate through all directories sub folders and files, no matter how much sub folder and files are.
then from array you can get what you want via a loop or as you want.
这是一个使用 Peter 上面的建议和递归的示例。
Here's an example using Peter's suggestion above and recursion.
要迭代文件和文件夹,您通常会使用 DirectoryInfo 和 FileInfo 类型。 FileInfo 类型有一个 Length 属性,该属性返回文件大小(以字节为单位)。
我认为您必须编写自己的代码来迭代文件并计算总文件大小,但它应该是一个非常简单的递归函数。
To iterate through files and folders you would normally use the DirectoryInfo and FileInfo types. The FileInfo type has a Length property that returns the file size in bytes.
I think you must write your own code to iterate through the files and calculate the total file size, but it should be a quite simple recursive function.
请注意,您将需要执行验证检查。
Note that you will need to perform validation checks.