上記の方法を使用していますが、上記の例外が発生します。
ディレクトリ名に不正な文字は見当たりません (期待どおりに結果を返す他のディレクトリがあります)。メソッドで失敗した同じディレクトリで
静的を呼び出すと、問題はなく、メソッドは期待どおりに戻ります。
この不正行為の原因は何ですか?Directory.GetFiles(String, String, SearchOption)
DirectoryInfo
2 に答える
Mac で (ネットワーク共有を介して) ディレクトリをスキャンしているときに、この問題に遭遇しました。
DirectoryInfo.GetFiles(@"//macbook/sharedfolder")
どうやら、Mac では <,>,? ファイル名に含まれていますが、Windowsではそうではありません。
ディレクトリ内のファイル名の 1 つに無効な文字が含まれていると、この「不正な文字」エラーが発生しました。
msdnに記載されているように、 anArgumentException
が発生するのは
searchPattern には、GetInvalidPathChars メソッドによって定義された 1 つ以上の無効な文字が含まれています。
(searchPattern
はメソッドの最初の String 引数です)。
これをテストするには、試してみてください
var invalidChars = <yourSearchPattern>.Select(x => x).Intersect(Path.GetInvalidPathChars()).ToList();
invalidChars に何かが見つかれば、問題の原因が見つかります。
編集
Directory.GetFiles()で動作するのはなぜですか? 私は理解していないことを認めなければなりません。
あんArgumentException
が上がる
最初の引数 ( path
) に無効な文字 (またはIsNullOrWhiteSpace
) がある場合、または
2 番目の引数 ( searchPattern
)の場合
有効なパターンが含まれていません
そして、有効なパターンは
このパラメーターは、2 つのピリオド ("..") で終わることも、2 つのピリオド ("..") の後に DirectorySeparatorChar または AltDirectorySeparatorChar を含めることも、InvalidPathChars の文字を含めることもできません。
InvalidPathChars
(時代遅れ)と同じ結果が得られるため、GetInvalidPathChars()
少なくとも.net 4.5では、行き詰まっていることを認めなければなりません。
異なるバージョンの .net を使用できますが、両者に違いはありますか?