Windows-файл и пути к локальному диску с помощью CreateFile () WinAPI - PullRequest
0 голосов
/ 24 января 2019

Приложение, которое прекрасно работало с Windows XP и Windows 7, внезапно создало проблемы с Windows 10 Pro. Тем не менее, с Windows 10 IoT Enterprise, кажется, работает нормально. Казалось, что он отлично работал еще в мае 2018 года с Windows 10, но с более новыми установками Windows 10 он не работает.

После некоторого расследования мы обнаружили, что приложение, похоже, не может создать набор файлов, которые оно использует для постоянных данных в Windows 10 Pro.

Глядя дальше, мы обнаружили, что полный путь был неверным. Похоже, что путь к каталогу, в котором хранились файлы, хотя он и не был правильно сконструирован, хорошо работал с Windows XP и Windows 7, но не с Windows 10 Pro.

Генерируемое имя пути выглядело так (это обратные косые черты пути, а не обратные косые черты C / C ++ для экранирования символа):

\C:\DirA\DirB\DirC

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

\\.\C:\DirA\DirB\DirC

Читая статью MSDN о Именовании файлов, путей и пространств имен , я немного сбит с толку из-за того, что, как представляется, существует множество различных способов создания допустимого имени пути. Похоже, что разные файловые системы Windows (FAT16, FAT32, NTFS и т. Д.) Имеют разные соглашения об именах.

Какой формат пути мне следует использовать, чтобы мое приложение могло создавать и открывать файлы в определенном каталоге на локальном диске C: в нескольких разных версиях Windows? Я особенно заинтересован в Windows 7, POSReady 7, Windows 10 и Windows 10 IoT Enterprise (что не совпадает с Windows 10 IoT).

Я использую Win32 API CreateFile() для создания / открытия файлов.

1 Ответ

0 голосов
/ 24 января 2019

Какой формат имени пути мне следует использовать, чтобы мое приложение могло создавать и открывать файлы в определенном каталоге на локальном диске C: с несколькими различными версиями Windows?

Вы должны использовать:

C:\DirA\DirB\DirC

Или, если вам нужно получить доступ к имени пути длиннее MAX_PATH и не / не можете подписаться нановая функция longPathAware, представленная в Windows 10 версии 1607:

\\?\C:\DirA\DirB\DirC

НЕ используйте \C:\DirA\DirB\DirC, это неправильно отформатировано.

Вам не нужно использовать \\.\C:\DirA\DirB\DirC,хотя будет работать.Просто имейте в виду , что:

Префикс "\\.\" будет обращаться к пространству имен устройства Win32 вместо пространства имен файла Win32.

Обычно , вы будете использовать \\.\ только при доступе к локальным устройствам, таким как физические тома, последовательные / параллельные порты, именованные каналы, почтовые ящики и т. Д. Не при доступе к записям нафайловая система.

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