我正在使用上述方法,并得到上述异常。
我在目录名称中看不到任何非法字符(还有其他目录按预期返回结果)。当我使用该方法失败的同一目录
调用静态时,没有问题并且该方法按预期返回。
知道什么可能导致这种不当行为吗?Directory.GetFiles(String, String, SearchOption)
DirectoryInfo
2 回答
我在 Mac 上扫描目录时(通过网络共享)遇到了这个问题。
DirectoryInfo.GetFiles(@"//macbook/sharedfolder")
Apperenately 在Mac上拥有像<,>这样的字符是非常合法的,?在文件名中,但在 Windows 上不是。
当目录中的一个文件名包含无效字符时,我得到了这个“非法字符”错误。
如msdn中所述,ArgumentException
当
searchPattern 包含由 GetInvalidPathChars 方法定义的一个或多个无效字符。
(searchPattern
是方法的第一个 String 参数)。
要对此进行测试,您可以尝试
var invalidChars = <yourSearchPattern>.Select(x => x).Intersect(Path.GetInvalidPathChars()).ToList();
如果您在 invalidChars 中找到某些内容,您就会找到问题的根源。
编辑
为什么它适用于Directory.GetFiles()?我必须承认我不明白。
一个ArgumentException
被提出来
如果第一个参数(path
)具有无效字符(或IsNullOrWhiteSpace
),或
如果第二个参数 ( searchPattern
)
不包含有效模式
一个有效的模式是
该参数不能以两个句点(“..”)结尾或包含两个句点(“..”),后跟 DirectorySeparatorChar 或 AltDirectorySeparatorChar,也不能包含 InvalidPathChars 中的任何字符。
由于InvalidPathChars
(过时)给我的结果与GetInvalidPathChars()
.net 4.5 相同,我必须承认我被卡住了。
您可以使用不同版本的 .net,两者之间有什么区别?