在具有有效路径 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 中删除该文件时,该文件似乎都会立即重新出现。