Есть ли ограничения длины пути к файлу в NTFS? - PullRequest
13 голосов
/ 07 декабря 2009

Почему я не могу создать глубокий путь, чьи символы в пути больше 255 в файловой системе NTFS? Кажется, есть ограничения FAT32, но также существуют в NTFS? Кто-нибудь может предоставить некоторые документы?

Большое спасибо!

Ответы [ 3 ]

22 голосов
/ 07 декабря 2009

Ограничение в 260 символов - это не ограничение файловой системы, а Win32 API. Win32 определяет MAX_PATH как 260, который используется API для проверки длины пути, передаваемого в функции, такие как FileCreate, FileOpen и т. Д. (Которые используются .NET в BCL).

Однако вы можете обойти правила Win32 и создать пути длиной до 32K символов. В основном вам необходимо использовать синтаксис "\\? \ C: \ MyReallyLongPath \ File.txt", который вы не можете видел раньше. В последний раз я проверял, что классы File и FileInfo в .NET не позволяют использовать этот тип пути, но вы определенно можете сделать это из C / C ++. Вот ссылка для получения дополнительной информации.

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx

4 голосов
/ 07 декабря 2009

Цитируется из Википедии

Имена файлов ограничены 255 кодовых слов UTF-16. Определенные имена зарезервированы в корне тома каталог и не может быть использован для файлы. Это: $ MFT, $ MFTMirr, $ LogFile, $ Volume, $ AttrDef,. (Точка), $ Bitmap, $ Boot, $ BadClus, $ Secure, $ Upcase и $ Extend; [3]. (точка) и $ Extend - это оба каталога; другие файлы. Ограничения ядра NT полные пути к коду UTF-16 32,767 слова.

http://en.wikipedia.org/wiki/NTFS

3 голосов
/ 07 декабря 2009

Doc . Вы, безусловно, должны иметь возможность создавать более длинные пути к файлам, чем 255 байтов, при условии, что каждый отдельный компонент пути находится под этим. Однако вы должны использовать Unicode (W) версии вызовов доступа к файлам, чтобы получить такое поведение; если вы используете основанные на байтах интерфейсы ANSI (A), такие как те, что используются stdio, вы застрянете с ограничениями старого интерфейса пути до Unicode.

...