Почему недопустимые символы ( \\?\
) появляются перед путем к файлу только в определенных папках?
Неверный путь к файлу:
\\?\D:\computerfiles...
Файлы с неверным путем не могут быть открыты в исходной папке.
Символы \\?\
появляются только для некоторых файлов, находящихся в исходном местоположении, но они НЕ появляются при копировании файла в другую папку.
Я вижу это только тогда, когда нахожу файл, который НЕ открывается (например, изображение), и проверяю свойства, чтобы обнаружить недопустимый префикс.
Кроме того, как мне найти все пути с недопустимым префиксом?
решение1
Это не недопустимый символ. Это сигнал для Windows отключить искажение пути. Он позволяет иметь пути длиннее, чем MAX_PATH
.
СогласноИменование файлов, путей и пространств имен:
Функции ввода-вывода файлов в API Windows преобразуют «/» в «\" в ходе преобразования имени в имя в стиле NT, за исключением случаев использования префикса «\\?\", как подробно описано в следующих разделах.
В Windows API есть много функций, которые также имеют версии Unicode, чтобы разрешить расширенный путь для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов, разделенных обратными косыми чертами, каждый из которых имеет значение, возвращаемое параметром lpMaximumComponentLength функции GetVolumeInformation (обычно это значение составляет 255 символов). Чтобы указать расширенный путь, используйте префикс "\\?\". Например, "\\?\D:\very long path".
Похоже, что Windows Explorer в какой-то момент был включен для доступа к длинным путям. В процессе вы можете увидеть следующее в поле «Расположение» на странице свойств файла/папки:
- «Обычный» путь, если он достаточно короткий
- Путь к именам 8.3 (что-то вроде
C:\WHATEV~1\...
), если имена 8.3 существуют в этой файловой системе и если они достаточно короткие - В противном случае путь увеличенной длины
tl;dr: Ваш путь слишком длинный.