Dale 2012 Ответов: 3

Макс Макс длина пути исключения файл


Я провел некоторые обширные исследования по этой проблеме, и кажется, что нет никакой работы вокруг из-за работы netframe и установленного ОС ограничения на длину адресов. Поэтому мой вопрос заключается в том, как я могу исключить папки, которые превышают это ограничение, и просто перейти к следующему файлу или папке при попытке сканирования каталогов?

Заранее спасибо :)

Sergey Alexandrovich Kryukov

Опять же, никакого дампа исключений, никакого кода. На какую помощь вы надеетесь?
--СА

3 Ответов

Рейтинг:
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 - это что?

Рейтинг:
0

Aditya Prakash Roy

Привет,


вы также можете попробовать это решение:-


вам просто нужно скопировать папку проекта из вашего пути в корневой каталог (например: - d:\abc\abc\xyz\YourProject в d:\YourProject )


Ошибка максимальной длины пути к файлу решена. этот трюк работает в моем случае.

спасибо