2013-07-04 119 views
0

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

+3

你可以发布代码吗? – shahkalpesh

+2

这似乎是世界上最明显的事情,但*你传递的字符串是什么?* –

回答

1

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

DirectoryInfo。GetFiles(@“// macbook/sharedfolder”)

很明显,在mac上有相当合法的字符,如<,> ,?在一个文件名,但在Windows上它不是。

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

+0

我认为这也是我的例外的原因。我结束了在迭代Directory.GetFiles(String,String,SearchOption)结果的foreach循环中使用try-catch块...效率不是很高。 – eyal

+0

你并不需要跳过这个目录。当迭代从Directory.GetFiles返回的文件路径时,可以在try-catch中构造每个FileInfo,这样,您只能跳过违反Windows样式文件名的文件。 – eyal

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

相关问题