有効なパスが C:\Users\David の Vista マシンで Directory.GetFiles(@"C:\Users\David") を呼び出すと、ディレクトリの内容を表示できる David ユーザーとして実行すると、次の ArgumentException がスローされます。 Windowsエクスプローラーで問題ありません:
System.ArgumentException message: Illegal characters in path.
Argument: ""
Stack trace:
at System.IO.Path.CheckInvalidPathChars(String path)
at System.IO.Path.InternalCombine(String path1, String path2)
at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
at System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption)
at System.IO.Directory.GetFiles(String path)
at Microsoft.Samples.XFileExplorer.ContentView.CreateContentDataTable(String CurrentFolder) in C:\Users\david\Downloads\MEF Preview 5\MEF Preview 5\Samples\XFileExplorer\XFileExplorer\ContentView.xaml.cs:line 108
Vista マシンはたまたま MacFuse を実行している Mac からアクセスされたため、ディレクトリには「._Icon」という名前のように見えるファイルが含まれていますが、実際には不正な文字が含まれている必要があります。これがエラーの原因だと思います。Directory.GetFiles() が気に入らないファイル名を実行したときに例外がスローされたときにどうするかという問題が残っていますか? このような例外を経由しないファイルの内容を一覧表示する別の方法はありますか?
この特定のファイルに関しては、ファイル名に、Windows エクスプローラーまたはコマンド プロンプトでは表示されない文字が含まれている必要があると思われます。
C:\Users\david>dir ._Icon
Volume in drive C is Bootcamp
Volume Serial Number is XXXX-XXX
Directory of C:\Users\david
File Not Found
そして最後に:
C:\Users\david>dir ._Icon*
Volume in drive C is Bootcamp
Volume Serial Number is XXXX-XXX
Directory of C:\Users\david
05/25/2008 07:40 AM 43,296 ._Icon
1 File(s) 43,296 bytes
0 Dir(s) 58,950,623,232 bytes free
SMB全体でファイルを見ると、ファイルの名前は実際には「._Icon?」のようです。Mac からファイルを削除しようとするたびに、ファイルがすぐに再表示されるようです。