2012-03-16 109 views
1

我有一個應用程序必須枚舉幾個文件夾並處理其中的文件。DirectoryInfo.EnumerateDirectories是否對項目進行排序?

它必須支持恢復,這意味着它必須從最後一次處理的文件夾開始。

我正在考慮使用the DirectoryInfo.EnumerateDirectories method。我會將最後一個處理目錄的名稱保存在一個文件中,跳過枚舉直到我遇到該目錄名並繼續處理。

但是,文檔沒有說明列舉文件的順序。

假設使用這種方法程序將總是處理剩餘的目錄是否安全?或者是否有可能下一次程序運行時,目錄將以另一種順序枚舉,從而可能會遺留一些未處理的內容並處理其他內容兩次?

如果這種方法不安全,那麼將會是一個好的選擇?

+3

我不會依賴於特定的順序,特別是如果文檔沒有提到任何有關它。另外,如果在恢復之前添加了另一個目錄,則根據排序或排序,最後一個項目之前*會怎麼做? – Botz3000 2012-03-16 14:52:21

+0

@ Botz3000在目前的情況下,我不擔心當前處理目錄中添加_before_的目錄。它不應該發生。 – GolfWolf 2012-03-16 14:58:16

回答

2

內部EnumerateDirectories()使用Win32 API的FindNextFile()source code)。來自MSDN:

「不能保證搜索返回文件的順序,例如字母順序,並且依賴於文件系統。」

1

DirectoryInfo.EnumerateDirectories()返回您的msdn文檔中的IEnumerable<DirectoryInfo>。我認爲它已經被排序,即使排序了,也會根據DirectoryInfo的哪個字段或屬性進行排序。 您可以自行排序查詢。

// Create a DirectoryInfo of the Program Files directory. 
DirectoryInfo dirPrograms = new DirectoryInfo(@"c:\program files"); 

DateTime StartOf2009 = new DateTime(2009, 01, 01); 
// LINQ query for all directories created before 2009. 
var dirs = (from dir in dirPrograms.EnumerateDirectories() 
       where dir.CreationTimeUtc < StartOf2009 
       order by dir.Name).ToList(); 
相關問題