Существуют ли какие-либо ограничения на длину пути к файлу в NTFS?
Вопрос
Почему я не могу создать глубокий путь, количество символов в пути которого превышает 255 в файловой системе NTFS?Вроде ограничения FAT32, но и в NTFS существуют?Кто-нибудь может предоставить какие-нибудь документы?
Большое спасибо!
Решение
Ограничение в 260 символов — это ограничение не файловой системы, а ограничения Win32 API.Win32 определяет MAX_PATH как 260, и это то, что API использует для проверки длины пути, передаваемого в такие функции, как FileCreate, FileOpen и т. д.(которые используются .NET в BCL).
Однако вы можете обойти правила Win32 и создать пути длиной до 32 000 символов. По сути, вам нужно использовать синтаксис «\\?\C:\MyReallyLongPath\File.txt», который вы, возможно, раньше не видели.Последний раз, когда я проверял, классы File и FileInfo в .NET не позволяют использовать этот тип пути, но вы определенно можете сделать это из C/C++.Вот ссылка для получения дополнительной информации.
http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx
Другие советы
Цитата из Википедии
Имена файлов ограничены 255 кодовыми словами UTF-16.Определенные имена зарезервированы в каталоге корневых объемов и не могут использоваться для файлов.Это:$ Mft, $ mftmirr, $ logfile, $ volume, $ attrdef ,.(DOT), $ BITMAP, $ BOOT, $ BADCLUS, $ Secure, $ Upcase и $ Extend; [3].(DOT) и $ Extend являются каталогами;Остальные являются файлами. Ядро NT ограничивает полный путь до 32 767 кодовых слов UTF-16.
Док.Вы, безусловно, сможете создавать пути к файлам длиной более 255 байт, если каждый отдельный компонент пути находится под ним.Однако для достижения такого поведения вы должны использовать версии вызовов доступа к файлам в формате Unicode (W);если вы используете байтовые интерфейсы ANSI (A), такие как те, которые используются stdio, вы столкнетесь с ограничениями старого интерфейса пути до Unicode.