Рейтинг:
25
Sergey Alexandrovich Kryukov
Вы не можете иметь имена каталогов/файлов в вашей системе с именем пути, превышающим MaxPath
Исключение может быть результатом какой-то ошибки при вычислении пути.
[РЕДАКТИРОВАТЬ]
Имена файловых систем являются допустимыми, если они получены с помощью Directory.GetFiles
или Directory.GetDirectories
Эти методы гарантируют, что полученные имена представляют объекты файловой системы, которые" физически " присутствуют в файловой системе. Такое имя всегда должно подчиняться правилам ограничения длины имени, иначе оно не может быть создано.
Если имена составлены с использованием какого-то другого метода (что может легко произойти, если вам нужно составить имя для создания нового файла/каталога программно), то имя может показаться слишком длинным и вызвать это исключение.
[КОНЕЦ РЕДАКТИРОВАНИЯ]
Пожалуйста, смотрите мой комментарий к этому вопросу. Где информация? Такого рода ошибки обычно довольно легко найти и исправить.
—СА
Dale 2012
У меня не было никаких проблем с кодом сканирования, но у меня было много папок с файлами рабочего стола, и что не так, что я катагоризировал в одну папку, поэтому я знаю, что эта ошибка является подлинной и имеет дело с исключением max path, но мой вопрос заключается в том, как пропустить папки и файлы с именами, превышающими это значение?
Sergey Alexandrovich Kryukov
Как я уже сказал: что-то должно быть не так в вашем коде. Почему вы думаете, что задаете правильный вопрос? Вы думаете, что вам нужно что-то пропустить, но я говорю, что этого не должно быть. Опубликуйте соответствующую часть вашего кода и исключение сделано! Если вы этого не сделаете, обсуждать будет нечего-пока.
--СА
Dale 2012
В порядке исключения:
Указанный путь, имя файла или и то, и другое слишком длинны. Полное имя файла должно быть не более 260 символов, а имя каталога-не более 248 символов.
и линии на ошибки:
Dim fi As FileInfo = New FileInfo(file1)
Dale 2012
можем ли мы теперь обсудить эту проблему или мне нужно что-то добавить?
Sergey Alexandrovich Kryukov
1) Вы уверены, что исключение было вызвано именно этой строкой? (Вы не сделали свалку исключений, как я просил. В дампе исключений вы можете распечатать стек исключений (настоятельно рекомендую), и стек покажет все соответствующие номера строк в коде.)
2) уверены ли вы, что строковое значение переменной "file1" представляет собой существующий файл? Пожалуйста, см. Мой обновления в ответ, между [правка] и [редактирование]
--СА
Рейтинг:
12
Nish Nishant
Как правило, наиболее распространенной причиной сбоя рекурсивного поиска жестких дисков является то, что определенные каталоги требуют разрешений, которых нет у вызывающего кода.
Обновление
~~~~~~~~
Ладно, к сожалению, занятия в System.IO
не используйте пути Unicode (где вы ставите префикс"\\? \ " к пути). Вы можете избежать использования системы.IO и вместо этого P / вызывают API напрямую и используют W-версии функций (а затем используют пути Unicode).
Пример статьи, которая делает это:
.NET 2.0 обходной путь для PathTooLongException[^]
Хотя в статье объясняется другой API, вам нужно будет сделать что-то подобное.
В качестве альтернативы просто пропустите файлы, которые превышают максимальный путь (но я думаю, что вы в конечном итоге пропустите слишком много файлов, если пойдете по этому маршруту). Жестко закодированное значение для MaxPath в System.IO
is 260 (Windows ANSI filepath limit).
Dale 2012
хороший ответ, но я совершенно уверен, что проблема не связана с отказом в доступе. Исключение явно указывает на исключение maxpath, но спасибо Вам за понимание.
Я все равно буду оценивать ваш ответ
Nish Nishant
Не могли бы вы вставить точный текст сообщения об ошибке?
Dale 2012
Мне понадобится одна минута, чтобы получить это для u brb
Nish Nishant
Ладно, спасибо.
Dale 2012
В порядке исключения:
Указанный путь, имя файла или и то, и другое слишком длинны. Полное имя файла должно быть не более 260 символов, а имя каталога-не более 248 символов.
и линии на ошибки:
Dim fi As FileInfo = New FileInfo(file1)
Nish Nishant
Ладно, я обновил свой ответ, Дейл.
Dale 2012
Как я могу пропустить файлы? Я не беспокоюсь о том, сколько папок пропущено, потому что я не ожидаю, что многие папки и файлы выйдут за пределы этого ограничения.
заранее благодарю вас, а также благодарю за ссылку и быстрый ответ!
Dale 2012
Еще несколько вопросов об этой ссылке вы дали, если позволите...
1) я не уверен, как использовать файл исходного кода
2) CreateFileW - это что?