0

我正在使用上述方法,并得到上述异常。
我在目录名称中看不到任何非法字符(还有其他目录按预期返回结果)。当我使用该方法失败的同一目录
调用静态时,没有问题并且该方法按预期返回。 知道什么可能导致这种不当行为吗?Directory.GetFiles(String, String, SearchOption)DirectoryInfo

4

2 回答 2

1

我在 Mac 上扫描目录时(通过网络共享)遇到了这个问题。

DirectoryInfo.GetFiles(@"//macbook/sharedfolder")

Apperenately 在Mac上拥有像<,>这样的字符是非常合法的,?在文件名中,但在 Windows 上不是。

当目录中的一个文件名包含无效字符时,我得到了这个“非法字符”错误。

于 2013-07-10T18:26:02.273 回答
1

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,两者之间有什么区别?

于 2013-07-04T15:07:04.663 回答