Как создать каталоги в окнах с длиной пути более 256 - PullRequest
6 голосов
/ 09 августа 2011

У меня есть несколько уровней каталогов в пути к папке. Когда путь превышает 256, я не могу создать подпапку или файл из него. Есть ли шанс построить пути больше этой длины. Кто-нибудь может мне помочь.

Ответы [ 3 ]

6 голосов
/ 09 августа 2011

На самом деле ограничение на строки пути составляет 260 символов.Базовая ОС в наши дни может поддерживать гораздо более длинные имена путей, от до 32 767 символов .Чтобы назвать путь с длинным именем, вам нужно использовать магический префикс \\?\ и использовать версию API для Unicode.

Однако многие инструменты не поддерживают такие длинные имена.Классическим примером такого инструмента является Проводник, который не позволяет создавать объекты с именами длиннее 260 символов.Поэтому я настоятельно советую вам избегать создания таких длинных имен - в долгосрочной перспективе это избавит вас от душевных страданий.

2 голосов
/ 09 августа 2011

Это должно помочь вам начать: http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#maxpath

К сожалению, я не думаю, что эта проблема исчезнет в ближайшее время, так что вы бы хорошо ознакомились с этими вещами.

Кроме того, если у вас есть доступ к robocopy (поставляется в комплекте с Windows Vista и 7, но также доступен для XP), который поддерживает длинные пути, вы можете создавать свои файлы/ вложенные папки в папке более высокого уровня, а затем с помощью robocopy переместить вложенную папку в нужное место вглубь дерева папок.

1 голос
/ 09 августа 2011

Согласно документации здесь http://msdn.microsoft.com/en-us/library/Aa365247, максимальная длина на самом деле составляет около 32 000, но большинство оконных API по-прежнему ограничивают вас MAX_PATH, что составляет 260. Есть некоторые API-интерфейсы Unicode, которые позволяют вам выйти за пределы 260 .

Смотри здесь, http://msdn.microsoft.com/en-us/library/aa363856.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...