Windows →
Максимальная длина пути в NTFS
В NTFS заложена поддержка длины пути больше, чем поддерживает Windows. В Windows длина пути ограничена константой MAX_PATH, равной 260 символам. Почему именно такое число, а не, скажем, 255?
255 это, видимо, максимальная длина имени файла или каталога. Если это каталог, то, наверное, в путь ещё должен уместиться завершающий символ "\"; Прибавляем 1. Ещё три символа — для буквы диска. Прибавляем 3. Получается 259. Последний, 260-й символ, это, видимо, нулевой байт, завершающий строку.
В MSDN сказано, что NTFS имеет следующие ограничения:
Максимальная длина имени файла — 256 символов.
Максимальная длина пути — 32,767 символов Юникода, при этом каждый компонент пути не превышает 255 символов.
Я решил проверить, а возможно ли в Windows добраться до этого предела.
В MSDN я нашёл информацию о том, что ограничение длины пути снимается, если использовать UNC-пути (это если в начале пути прибавить что-то типа \\?\).
Я написал небольшую программку, которая создала на разделе NTFS путь длиной около 25994, после чего вывалилась с ошибкой (дело происходило под Win XP SP3). На более старых сервис-паках программа делает путь ещё длиннее, около 32000 символов.
Вот её код:
Каталог, содержащий столько вложенных друг в друга каталогов, не воспринимается системой нормально, например его не получается удалить из проводника, и перейти к самой последней папке тоже не получится.
255 это, видимо, максимальная длина имени файла или каталога. Если это каталог, то, наверное, в путь ещё должен уместиться завершающий символ "\"; Прибавляем 1. Ещё три символа — для буквы диска. Прибавляем 3. Получается 259. Последний, 260-й символ, это, видимо, нулевой байт, завершающий строку.
В MSDN сказано, что NTFS имеет следующие ограничения:
Максимальная длина имени файла — 256 символов.
Максимальная длина пути — 32,767 символов Юникода, при этом каждый компонент пути не превышает 255 символов.
Я решил проверить, а возможно ли в Windows добраться до этого предела.
В MSDN я нашёл информацию о том, что ограничение длины пути снимается, если использовать UNC-пути (это если в начале пути прибавить что-то типа \\?\).
Я написал небольшую программку, которая создала на разделе NTFS путь длиной около 25994, после чего вывалилась с ошибкой (дело происходило под Win XP SP3). На более старых сервис-паках программа делает путь ещё длиннее, около 32000 символов.
Вот её код:
const int maxpath = 32768;
wchar_t *longpath = (wchar_t *) GlobalAlloc(GPTR, maxpath);
wcscpy(longpath,L"\\\\?\\C:\\");
const wchar_t next[] = L"LONGLONGLONG\\";
int pathsize = wcslen(longpath);
int nextsize = wcslen(next);
wcscat(longpath, next);
while (pathsize < maxpath && CreateDirectory(longpath, NULL)) {
pathsize += nextsize;
wprintf(L"Path size: %u\n", pathsize);
wcscat(longpath, next);
}
wprintf(L"\nDone.");
GlobalFree(longpath);
Каталог, содержащий столько вложенных друг в друга каталогов, не воспринимается системой нормально, например его не получается удалить из проводника, и перейти к самой последней папке тоже не получится.
07.12.2009 14:17+0300