DirectoryInfo.GetFiles方法(String,SearchOption)异常:System.ArgumentException:路径中的非法字符

时间:2013-07-04 14:56:42

标签: .net

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

2 个答案:

答案 0 :(得分: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,两者之间有区别吗?

答案 1 :(得分:1)

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

  

DirectoryInfo.GetFiles(@ “//的MacBook / sharedfolder”)

似乎在Mac上使用像&lt;,&gt;这样的字符是非常合法的?在文件名中,但在Windows上它不是。

当目录中的某个文件名包含无效字符时,我收到此“非法字符”错误。