使用CreateFile()WinAPI的本地驱动器的Windows文件和路径名

使用CreateFile()WinAPI的本地驱动器的Windows文件和路径名,file,winapi,path,File,Winapi,Path,一个在WindowsXP和Windows7中运行得很好的应用程序突然在Windows10Pro中出现了问题。然而,对于Windows 10 IoT Enterprise,它似乎工作正常。在2018年5月,Windows 10似乎也可以正常运行,但在更新的Windows 10安装中,它却无法正常运行 经过一些调查,我们发现应用程序似乎无法创建用于Windows 10 Pro持久数据的文件集 进一步查看,我们发现完整的路径名不正确。文件存储目录的路径名似乎在Windows XP和Windows 7中

一个在WindowsXP和Windows7中运行得很好的应用程序突然在Windows10Pro中出现了问题。然而,对于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
在阅读MSDN关于的文章时,我对构建有效路径名的许多不同方式感到有点困惑。不同的Windows文件系统(FAT16、FAT32、NTFS等)似乎有不同的命名约定

我应该使用什么样的路径名格式,以便我的应用程序能够使用多个不同版本的Windows在本地驱动器
C:
上的特定目录中创建和打开文件?我对Windows 7、POSReady 7、Windows 10和Windows 10物联网企业(与Windows 10物联网不同)特别感兴趣

我正在使用Win32 API
CreateFile()
函数创建/打开文件

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

您应该使用:

C:\DirA\DirB\DirC
或者,如果您需要并且不/不能选择加入Windows 10 1607版中引入的新
longPathAware
功能:

\\?\C:\DirA\DirB\DirC
请勿使用
\C:\DirA\DirB\DirC
,此格式不正确

您不需要使用
\\.\C:\DirA\DirB\DirC
,尽管它可以工作。只是:

“\\.\”
前缀将访问Win32设备名称空间,而不是Win32文件名称空间


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

使用UNC路径访问网络共享,ie:
\\server\share
\\?\UNC\server\share
但为什么不
\.\C:\DirA\DirB\DirC
-这是正式的正确格式是的,但是如果说是真的,我不明白这意味着什么,我将访问Win32设备名称空间而不是Win32文件名称空间。该文件始终在设备上打开。文件系统文件。当然,我不清楚shell api是否使用\\.\或\\?\前缀转换路径,但对于
CreateFile
文件系统设备,这也是一个设备<代码>\.\PhysicalDiskX或
\.\c:
都是指向某个设备的符号链接-事实上这里没有任何不同,因为我不理解msdnarticle@RbMm很明显,你是一个缺乏勇气的人,你总是发表评论/回答,深入API内部等等。因此,也许您喜欢在API调用中拥有更强大的功能。典型的用户不会这样做。在访问文件系统执行简单任务(创建/读取/写入文件等)时,使用
\\.\
是过分的,但它显然在更高级的场景中有其用途。这不是其中之一。不同的Windows文件系统(FAT16、FAT32、NTFS等)似乎有不同的命名约定-不,这是错误的。这里的文件系统根本不相关。win32 sunsystem在传递到文件系统之前将路径转换为本机格式@RbMm感谢您提供指南文档的链接。
\\?\C:\DirA\DirB\DirC