2012-03-16 2 views
1

私はいくつかのフォルダを列挙し、その中のファイルを処理するアプリケーションがあります。DirectoryInfo.EnumerateDirectoriesはアイテムを並べ替えますか?

これは、レジュームをサポートする必要があります。つまり、前回処理していたフォルダから開始する必要があります。

私はthe DirectoryInfo.EnumerateDirectories methodを使用することを考えていました。私は最後の処理されたディレクトリの名前をファイルに保存し、そのディレクトリ名を満たすまで列挙をスキップしてそこから処理を続行します。

しかし、ドキュメントでは、ファイルが列挙される順序について何も言及していません。

この方法を使用すると、プログラムは常に残りのディレクトリを処理すると想定するのは安全でしょうか?あるいは、次回プログラムが実行されるときにディレクトリが別の順序で列挙され、未処理のまま残して他のものを2回処理できる可能性がありますか?

この方法が安全でない場合は、どのような方法が良いでしょうか?

+3

特に、ドキュメンテーションがそれについて何も言わない場合、私は特定の順序に依存しません。また、別のディレクトリが、sort oderに従って*前の* item *の前に再開される前に追加された場合、あなたはどうしますか? – Botz3000

+0

@ Botz3000現状では、現在処理されているディレクトリの前に追加されたディレクトリについては心配していません。それは動かないはずがありません。 – GolfWolf

答えて

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(); 
関連する問題