В Windows, когда вы должны использовать "\\?\" префикс имени файла?
я наткнулся на библиотеку c для открытия файлов с именем Unicode. Перед открытием файла он сначала преобразует имя файла в путь, добавив"\?". Есть ли какая-либо причина сделать это, кроме как увеличить максимальное количество символов, разрешенных в пути, за эта статья msdn?
похоже на эти"\? "пути требуют версии Unicode API Windows и стандартной библиотеки.
5 ответов
Да, это только для этой цели. Однако вы, вероятно, увидите проблемы совместимости, Если вы решите создать пути по длине MAX_PATH. Например, оболочка проводника и командная строка (по крайней мере, на XP, я не знаю о Vista) не могут обрабатывать пути по этой длине и будут возвращать ошибки.
лучше всего использовать этот метод, вероятно, не для создания новых файлов, а для управления существующими файлами, которые кто-то другой, возможно, создал.
я управлял файловым сервером, который обычно получал файлы с path_length > MAX_PATH
. Видите ли, пользователи видели файлы как H:\myfile.txt
, но на сервере это было на самом деле H:\users\username\myfile.txt
. Поэтому, если пользователь создал файл с точно MAX_PATH
символов, на сервере это было MAX_PATH+len("users\username")
.
(создание файла с символами MAX_PATH не так уж редко, поскольку при сохранении веб-страницы в Internet Explorer в качестве имени файла используется заголовок страницы, который может быть довольно длинным для некоторых страниц).
кроме того, совместное использование диска (через сеть или usb) с Mac или Linux-машиной, вы можете найти себе файлы с именами, такими как con, prn или lpt1. И опять же, префикс позволяет вам и вашим скриптам обрабатывать эти файлы.
Я думаю, что первое, что нужно отметить, это"\\?\" не путь путь UNC. Вы были более точны во второй раз, когда назвали его UNC -стиль путь. Но даже тогда сходство возникает только из-за двух обратных косых черт в начале. Это не имеет никакого отношения к UNC. Это подкрепляется тем фактом, что вы должны использовать еще больше символы, чтобы получить UNC-путь с "\\?\" префикс.
Я думаю, что у вас есть все причины для использования эти префиксы. Он поднимает ограничение максимальной длины, как описано в приведенной вами статье. И это относится только к путям Unicode; пути, отличные от Unicode, не избегают ограничения, используя этот префикс.
следует отметить, что префикс не разрешен для относительных путей, только для абсолютных. Возможно, вы захотите дважды проверить, что ваша библиотека C соблюдает это ограничение.
а также позволяет более длинные пути,"\\?\ "префикс также позволяет использовать файлы и имена каталогов, такие как" con "и"aux". Обычно Windows интерпретирует их как старомодные устройства DOS.
Я пишу код Windows с 1995 года, и хотя я знаю этот префикс, я никогда не находил причин его использовать. Увеличение длины пути за MAX_PATH
кажется, единственная причина для этого, и ни я, ни кто-либо из клиентов моих программ никогда этого не делали, насколько мне известно.