Как обрабатывать длинные относительные пути, используя префикс '\\? \'? - PullRequest
0 голосов
/ 28 мая 2019

Итак, мы все знаем, что программы Windows по умолчанию ограничены длиной до 260 символов.Однако этот предел можно легко преодолеть, добавив префикс пути к последовательности символов \\?\.

Однако по некоторым причинам это невозможно с относительными путями, как говорится в MSDN:

Поскольку вы не можете использовать префикс \\?\ с относительным путем, относительные пути всегда ограничиваются общим количеством MAX_PATH символов.

( источник )

Я не совсем понимаю причину, по которой Microsoft решила запретить относительные пути с префиксом \\?\, поэтому, если за этим решением есть какое-то обоснование, я был бы очень рад услышать об этомпотому что для меня не имеет смысла, что \\?\ разрешен только для полных путей.

Мой настоящий вопрос, однако, заключается в том, как справиться с этим ограничением: я должен просто вызвать GetFullPathName() относительнопути для расширения их до полных путей, затем добавьте префикс \\?\, а затем передайте этот путь к fopen() и т. д., или каков рекомендуемый способ устранения этого ограничения?

1 Ответ

1 голос
/ 29 мая 2019

Нельзя использовать префикс \\?\ с относительным путем.

Когда относительный путь передается в систему, он анализируется как абсолютные пути и затем передается в систему.И, как упоминается в source :

Префиксы \\:\ не используются как часть самого пути.Они указывают, что путь должен быть передан в систему с минимальной модификацией, что означает, что вы не можете использовать прямую косую черту для представления разделителей пути, точку для представления текущего каталога или двойные точки для представления родительского каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...