MAX_PATH ограничение в Boost.Filesystem - PullRequest
11 голосов
/ 05 января 2011

Я хочу использовать библиотеку Boost.Filesystem для управления путями, файлами и каталогами.Мой вопрос: поддерживаются ли пути длиннее, чем MAX_PATH?

Я знаю, что в Win32API у нас есть обходной путь "\\? \", Но он не поддерживается базовыми функциями, такими как PathAppend и PathCombine.

Так что яИщу любую полезную информацию о MAX_PATH и Boost.FS.

Спасибо

UPD: я забочусь о всех операциях, таких как добавление пути, объединение путей и т. д. (У меня есть эти функции в Win32API,но они не работают с путями длиннее MAX_PATH) Например, CreateFileW и DeleteFileW оба поддерживают пути длиннее MAX_PATH.Может быть, Boost.FS заменяет служебные функции Win32API, такие как функции shlwapi и shell32, которые часто не поддерживают длинные пути

Ответы [ 2 ]

4 голосов
/ 09 марта 2011

Правда в том, что Windows поддерживает пути любой длины, и любой путь может быть преобразован в строку в Windows. В этом случае необходимо добавить \\?\, но это часть операции «сделать строку из заданного пути».

AFAIK, Boost :: FileSystem делает это неправильно в Windows.

Я не знаю, запланировано ли исправление. См. о том, как это сделать.

0 голосов
/ 05 января 2011

Вы можете манипулировать любой длиной строки пути файловой системы с или без Boost.Filesystem.

MAX_PATH - это ограничения Windows File API. То есть нельзя передавать слишком длинную строку пути в API Windows.

Например, удалить функцию Boost.Filesystem не удастся с длиной пути MAX_PATH. Вы хотите, чтобы Boost.Filesystem сделала что-то вроде изменения текущего каталога и использования относительного пути, чтобы предотвратить ограничение MAX_PATH? Я не думаю, что это возможно.

EDITED

Поскольку Boost.Filesystem реализована на строке C ++, вам не нужно беспокоиться о длине пути. Boost.Filesystem предоставляет не только методы манипуляции с путевой строкой, но и методы манипулирования файловой системой. Вам следует избегать методов файловой системы, если результирующий путь слишком длинный.

Я не знаю, поддерживает ли Boost.Filesystem путь Win32 Unicode, но вы можете преобразовать окончательный путь ANSI в путь Unicode перед вызовом файловых API Win32.

...