2013-03-22 2 views
1

Я хочу прагматически создать иерархию папок. Но в некоторых случаях проблема заключается в том, что имя папки выходит за пределы 260 символов, а создание папки становится неудачным. Я создал эту иерархию папок, используя пространство имен файлов Win32. Я хочу создать структуру папки в следующем формате. drive_letter: \ FOLDER1 \ folder2 \ folder3 \ Folder4 ........ \ FOLDER (N-1) \ FOLDER (N)Как создать папку с именем более 260 символов

FOLDER1, folder2, folder3 и т.д., имена папки. Эти имена имеют длину более 260 символов для например:

FOLDER1 зовут qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm

folder2 имя mnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbv cxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewqmnbvcxzlkjhgfdsapoiuytrewq

, как это будет продолжаться.

Как я могу найти это имя для имени папки/имени имени файла.

ОС: Windows 7 64 бит и Windows Server 2008 R2 64 бит.

Пожалуйста, помогите

+0

Вы получите код ошибки 123: ERROR_INVALID_NAME. Вот код, который вы могли бы тест: 'CreateDirectory (L«\\\\ \\ C: \\? Qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm», NULL);' – izogfif

ответ

2

MSDN-х CreateDirectory function объясняет вам именно это:

Чтобы продлить этот предел 32767 символов, вызовите версию функции Unicode и предварять \\?\ на пути. Для получения дополнительной информации о см. Именование файла.

Смотрите также: Should I deal with files longer than MAX_PATH?

поддержка NTFS имена файлов до 32К (32767 широких символов). Вам нужно, чтобы использовал только правильный API и правильный синтаксис имен файлов. Базовое правило : имя файла должно начинаться с \\?\, как \\?\C:\Temp. Тот же самый синтаксис, который вы можете использовать с UNC: \\?\Server\share\Path.

1

Вы можете использовать один из этих двух трюков:

  • Чтобы создать структуру папок с длиной пути более 260 символов, как C:\folder1\folder2\...\folder20, вы можете создать C:\folder19, C:\folder20, а затем двигаться folder20 со всеми его подпапки в C:\folder19, затем создайте C:\folder18 и переместите C:\folder19 с folder20 внутри C:\folder18. Повторяйте, пока не закончите создание этой структуры.
  • Вы можете использовать нотацию \\?\C:\folder1\folder2\...\folder20, чтобы создать свой путь. Более подробная информация находится здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx (поиск слов Ограничение максимальной длины пути).
+0

Похоже, эти уловки больше не работают на Windows, 10. Оба дают ошибку говоря путь слишком длинная. – deadlydog

0

Один путь компонент (например, имя папки или имя файла) ограничена значением MaximumComponentLength возвращаемого GetVolumeInformation. Это теоретически специфично для файловой системы, но на практике всегда 255.

Итак, вы не можете делать то, что вы просили, если вы не создадите свой собственный драйвер файловой системы, который поддерживает более длинные файловые компоненты. Что вам может делать, однако это создать путь с общей длиной длиной до 260 символов, как было указателем в других ответах.

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