2

在 Windows XP 和 Windows 7 上运行良好的应用程序突然在 Windows 10 Pro 中出现问题。但是,对于 Windows 10 IoT Enterprise,它似乎运行良好。早在 2018 年 5 月,它似乎在 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 APICreateFile()函数来创建/打开文件。

4

1 回答 1

6

我应该使用什么路径名格式,以便我的应用程序能够在C:具有多个不同版本的 Windows 的本地驱动器上的特定目录中创建和打开文件?

你应该使用:

C:\DirA\DirB\DirC

或者,如果您需要访问长于 的路径名MAX_PATH,并且不/不能选择加入longPathAwareWindows 10 版本 1607 中引入的新功能:

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

不要使用\C:\DirA\DirB\DirC,它的格式不正确。

您不需要使用\\.\C:\DirA\DirB\DirC,尽管它起作用。请注意

前缀将"\\.\"访问 Win32 设备命名空间而不是 Win32 文件命名空间。

通常,您\\.\只会在访问本地设备时使用,例如物理卷、串行/并行端口、命名管道、邮槽等。而不是在访问文件系统上的条目时。

于 2019-01-23T21:17:06.417 回答