確定最大文件大小是最好的選擇,我寫了下面的方法來確定最大文件大小:是遞歸的目錄
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;
}
Code Complete建議「使用遞歸選擇性」。既然如此,我想知道社區是否認爲這是對遞歸的有效使用。如果沒有,是否有更好的方法來做到這一點?
編輯:我不能在.NET 2.0中使用LINQ,因爲它不可用,但我不希望這個標籤,因爲只有進一步討論點像Jared的下方NET 2.0的問題。
編輯:根據在沒有獲取根目錄的文件時發現的問題清理代碼。
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;
}
你如何處理結和「快捷鍵」(硬或符號鏈接)?目錄樹並不總是一棵樹... – lexu
我不確定這是*主觀*。一旦我們確定了「最佳選項」(最快,最小內存佔用或其他)的含義,那麼任何特定的解決方案都可以輕鬆測試。有*目標*標籤嗎?出於興趣 - 「最佳選擇」是什麼意思? –
我不知道我是否應該將其標記爲主觀,但我會刪除它,除非有人反對。通過最佳選擇,我意味着最優雅和可靠的解決方案。我不確定是否有更安全的技術可以減少所需的代碼量。 –