2013-07-04 156 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,兩者之間有區別嗎?

相關問題