我编写了以下方法来确定最大文件大小:
public static long GetMaxFileSize(string dirPath, long maxFileSize)
{
DirectoryInfo [] dirInfos = new DirectoryInfo(dirPath).GetDirectories();
foreach (DirectoryInfo dirInfo in dirInfos)
{
DirectoryInfo [] subDirInfos = dirInfo.GetDirectories();
foreach (DirectoryInfo subDirInfo in subDirInfos)
maxFileSize = GetMaxFileSize(dirInfo.FullName, maxFileSize);
FileInfo [] fileInfos = dirInfo.GetFiles();
foreach (FileInfo fileInfo in fileInfos)
{
if (maxFileSize < fileInfo.Length)
maxFileSize = fileInfo.Length;
}
}
return maxFileSize;
}
Run Code Online (Sandbox Code Playgroud)
代码完成建议"有选择地使用递归".既然如此,我想知道社区是否认为这是递归的有效用法.如果没有,是否有更好的技巧?
编辑:我不能使用LINQ,因为它在.NET 2.0中不可用,但我不想将其标记为.NET 2.0问题,只是为了进一步讨论点,如下面的Jared.
编辑: 根据未获取根目录文件时发现的问题清理代码.
public static long GetMaxFileSize(DirectoryInfo dirInfo, long maxFileSize)
{
DirectoryInfo [] subDirInfos = dirInfo.GetDirectories();
foreach (DirectoryInfo subDirInfo in subDirInfos)
{
maxFileSize = GetMaxFileSize(subDirInfo, maxFileSize);
}
FileInfo [] fileInfos = dirInfo.GetFiles();
foreach (FileInfo fileInfo in fileInfos)
{
if (maxFileSize < fileInfo.Length)
maxFileSize = fileInfo.Length;
}
return maxFileSize;
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 10
我认为更好的方法是使用File System API通过Directory.GetFiles进行搜索.此方法提供子目录的自动搜索.这消除了是否递归的问题,而是决定如何在API的设计者(可能为这种情况设计它)上实现它.
这种方法结合LINQ提供了一个非常优雅的解决方案
var max = Directory
.GetFiles(path, "*", SearchOption.AllDirectories)
.Select(x => new FileInfo(x))
.Select(x => x.Length)
.Max();
Run Code Online (Sandbox Code Playgroud)
编辑正如Jimmy指出的那样,对于4.0及更高版本,最好使用EnumerateFiles来避免创建可能较大的数组的开销
var max = Directory
.EnumerateFiles(path, "*", SearchOption.AllDirectories)
.Select(x => new FileInfo(x))
.Select(x => x.Length)
.Max();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |