Я розробляю таблицю бази даних, яка буде містити файли завантажених файлів. Яка максимальна довжина імені файлу в NTFS, використовуваному Windows XP або Vista?
Я розробляю таблицю бази даних, яка буде містити файли завантажених файлів. Яка максимальна довжина імені файлу в NTFS, використовуваному Windows XP або Vista?
Відповіді:
Окремі компоненти імені файлу (тобто кожен підкаталог по шляху та кінцеве ім'я файлу) обмежені 255 символами, а загальна довжина шляху обмежена приблизно 32 000 символів.
Однак у Windows не можна перевищувати MAX_PATH
значення (259 символів для файлів, 248 для папок). Побачитиhttp://msdn.microsoft.com/en-us/library/aa365247.aspx для отримання детальної інформації.
Це 257 символів. Якщо бути точним: сам NTFS накладає максимальну довжину імені файлу в кілька тисяч символів (приблизно 30 000 щось). Однак Windows накладає максимальну довжину 260 для імені файлу Path +. Папка Drive + містить щонайменше 3 символи, тож ви отримуєте 257.
Ось що говорить "Не оброблений виняток" в рамках 4.5 при спробі зберегти файл із довгим ім'ям файлу:
Зазначений шлях, ім'я файлу або обидва вони занадто довгі. Повноцінне ім'я файлу має містити менше 260 символів, а ім'я каталогу - менше 248 символів.
199 на Windows XP NTFS, я щойно перевірив.
Це не теорія, а лише спроба на моєму ноутбуці. Можуть бути пом'якшувальні наслідки, але фізично це не дозволить мені зробити це більшим.
Цікаво, чи існує якась інша установка, що обмежує це? Спробуйте самі.
w
, видалив його і створив папку з такою ж назвою в Windows 7 x64. Тепер питання в тому, що тут є обмежуючим фактором: версія NTFS, ОС або підсистема або API Win32 в XP?
За даними MSDN , це 260 символів. Він включає "<NUL>"
-видимий невидимий завершальний нульовий символ, тому фактична довжина становить 259.
Але прочитайте статтю, це трохи складніше.
\\?\
префікс під час виконання до деякої не визначеної довжини. Після цього розширення шлях повинен залишатися під 32767 байтами.
Довжина в NTFS - 255. NameLength
Поле в $Filename
атрибуті NTFS - байт без зміщення; це дає діапазон 0-255.
Ім'я файлу iself може бути в різних "просторах імен". Поки є: POSIX, WIN32, DOS і (WIN32DOS - коли ім'я файлу може бути вихідним іменем DOS). (Оскільки рядок має довжину, він може містити \ 0, але це спричинить проблеми і не знаходиться в просторах імен, наведених вище.)
Таким чином, ім'я файлу чи каталогу може містити до 255 символів. Вказуючи повний шлях у Windows, вам потрібно встановити шлях до \\? \ (Або використовувати \\? \ UNC \ server \ share для UNC-шляхів), щоб позначити цей шлях як один із збільшеною довжиною (~ 32k символів) . Якщо ваш шлях довший, вам доведеться по дорозі встановити свою робочу директорію (тьфу - побічні ефекти через налаштування для загального процесу).
255 символів.
Я додаю це до вище затвердженої відповіді.
Щоб бути ЧИСТИМ, люди вважають, що це 255-260 символів, тому що це все, що підтримує Провідник Windows. Це дозволить зробити щось подібне до копіювання файлу з іменами файлів довше, ніж це. Однак програма може читати та записувати набагато довші імена файлів (саме так ви добираєтесь до довжин, на які Explorer скаржиться в першу чергу). Microsoft "рекомендується виправити" в таких ситуаціях, як відкрити файл у початковій програмі, яка його написала та перейменувати.
Згідно з новою документацією на Windows SDK (8.0), здається, передбачено нове обмеження шляху. Існує новий набір функцій обробки траєкторії та визначення PATHCCH_MAX_CCH таким чином:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
У цій частині офіційної документації чітко сказано, що це 255 символів Unicode для NTFS, exFAT і FAT32 та 127 Unicode або 254 символів ASCII для UDF.
Крім цього, максимальна довжина імені шляху завжди становить 32 760 символів Unicode, причому кожен компонент шляху не більше 255 символів.
WCHAR
елементів. Ні, це не "символи Unicode" (перевірте свою термінологію Unicode: кодові точки, символи тощо ...!).
255 символів, хоча повний шлях також не повинен бути довшим. У Вікіпедії є приємна таблиця про це: http://en.wikipedia.org/wiki/Filename .
238! Я перевірив його під Win7 32 біт із наступним сценарієм bat:
set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF
w
). І що тепер?
Насправді це 256, див. Порівняння функціональності файлової системи, Обмеження .
Щоб повторити публікацію на http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
"Якщо припустити, що ми говоримо про NTFS, а не про FAT32," 255 символів для шляху + файл "є обмеженням Explorer, а не самої файлової системи. NTFS підтримує шляхи довжиною до 32 000 символів Unicode, з кожного компонента до 255 символів.
Провідник - і API Windows - обмежує вас на 260 символів для шляху, що включає букву диска, двокрапку, роздільну косу рису та завершальний нульовий символ. Можна прочитати довший шлях у Windows, якщо почати його з
\\
"
Якщо ви прочитаєте вищезгадані публікації, ви побачите, що є пете, в чому ви можете бути впевнені: Пошук хоча б одного впертого користувача комп'ютера!
Я не можу створити файл із іменем + період + видалення в Провіднику WS 2012 довше 224 символів. Не стріляйте в месенджера!
У CMD того ж сервера я не можу створити довше 235 імен символів:
Система не може знайти вказаний шлях.
Файл із іменем 224 символів, створений у Провіднику, неможливо відкрити в «Блокноті ++» - він просто створює новий файл.
The system cannot find the path specified.
не те саме, що The specified path, file name, or both are too long.
. Я здогадуюсь, ти мав друк або щось таке. Це повідомлення ви отримуєте, якщо намагаєтесь створити файл на шляху, який не існує, або якщо ви хочете перейти до напрямку, який не існує.