2011-01-25 2 views
5

У меня есть несколько файлов на сервере, которые превышают лимит MAX_PATH. Я уже неоднократно слышал, что вы можете перечислить эти файлы по предварительному \\? \ Пути. Однако это не решает проблему с и ее партнерами, поскольку они используют структуру данных, которая ограничивает длину имени файла до MAX_PATH.Как перебирать длинные имена путей в любой форме Windows API

Есть ли другой способ перебора структуры каталогов, чтобы найти файлы с длинным именем? Я видел утилиты, которые делают это, но ни один из них не доступен в исходной форме.

Обратите внимание, что я видел записи в блоге от пользователей .NET BCL и следил за предоставляемыми ими ссылками.

Я бы предпочел сделать это на C или C++ для простоты, но любой свободно доступный язык будет делать пока.

Учтены указатели на код, документы или что-нибудь полезное.

ответ

9

Не думаю, что здесь есть проблема. Вы имеете в виду WIN32_FIND_DATA, который действительно возвращает имена файлов, ограниченные по длине, до MAX_PATH. Но поскольку это только часть имени файла, и путь опущен, ограничений нет.

Внутри каталога объект (файл или папка) ограничен длиной, обычно до 255 символов. Вы можете определить, что это предел с параметром lpMaximumComponentLengthGetVolumeInformation. Я был бы удивлен, если объем, установленный в Windows, может иметь максимальную длину компонента превышает 255.

призыв к FindFirstFile получает нуль-оканчивающийся строку, lpFileName, который указывает каталог и имя файла (например, «* .txt «скажем), чтобы искать. В документации говорится:

В версии ANSI этой функции, имя ограничивается MAX_PATH символов. Чтобы расширить этот предел до 32,767 широкоугольных символов, вызовите Юникодную версию функции и доведите «\\? \» До пути.

+0

Спасибо, Дэвид, ты был абсолютно прав. Это то, что я получаю от того, что не пытаюсь использовать API, прежде чем спрашивать. :) Действительно преждевременная оптимизация? – JimR

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