2013-07-04 4 views
0

Я использую вышеуказанный метод и получаю исключение выше.
Я не вижу никаких незаконных символов в имени каталога (есть другие каталоги, которые возвращают результаты, как ожидалось).
Когда я вызываю статический Directory.GetFiles(String, String, SearchOption) с тем же каталогом, который сбой по методу DirectoryInfo, проблем нет, и метод возвращается, как ожидалось.
Любая идея, что может вызвать это неправильное поведение?Исходный код DirectoryInfo.GetFiles (String, SearchOption): System.ArgumentException: Недопустимые символы в пути

+3

Можете ли вы разместить код, пожалуйста? – shahkalpesh

+2

Это может показаться наиболее очевидным в мире, но * что такое строка, в которой вы проходите? * –

ответ

1

Я столкнулся с этой проблемой при сканировании каталога на Mac (через общий сетевой ресурс).

DirectoryInfo.GetFiles (@ "// Macbook/общая_папка")

Apperenately это вполне легально на макинтош, чтобы иметь символы как <,> ,? в имени файла, но на окнах это не так.

Когда у одного из имен файлов в каталоге были недопустимые символы, я получил эту ошибку «незаконные символы».

+0

Я думаю, что это и причина моего исключения. Я закончил использование блока try-catch в цикле foreach, который повторяет результаты Directory.GetFiles (String, String, SearchOption) ... не очень эффективен. – eyal

+0

Вам не нужно пропускать этот каталог. Когда вы повторяете пути к файлам, возвращаемым из Directory.GetFiles, вы создаете каждый FileInfo в try-catch, и таким образом вы пропускаете только файлы, которые нарушают имя файла стиля окна. – eyal

1

, как указано в msdn, ArgumentException возникает, когда

searchPattern содержит один или несколько недопустимых символов, определенных методом GetInvalidPathChars.

(searchPattern - первый аргумент String метода).

, чтобы проверить это, вы можете попробовать

var invalidChars = <yourSearchPattern>.Select(x => x).Intersect(Path.GetInvalidPathChars()).ToList(); 

если вы нашли что-то в invalidChars, вы нашли источник вашей проблемы.

EDIT

Почему это работает с Directory.GetFiles()? Должен признаться, я не понимаю.

ArgumentException поднимается

, если первый аргумент (path) имеет недействительные символы (или IsNullOrWhiteSpace) или

, если второй аргумент (searchPattern)

не содержит действительный модель

И вот, действительный шаблон

Параметр не может заканчиваться в двух периодах («..„) или содержат два периода (“..») с последующим DirectorySeparatorChar или AltDirectorySeparatorChar, и не может содержать любой из символов в InvalidPathChars.

Как InvalidPathChars (устаревшее) дают мне тот же результат, как GetInvalidPathChars(), по крайней мере, в .net 4.5, я должен признать, что я застрял.

Вы можете использовать другую версию .net, где есть разница между двумя?

Смежные вопросы