使用CreateFile()WinAPI的本地驱动器的Windows文件和路径名
一个在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++反斜杠): 生成的正确路径名如下所示:使用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中
\\.\C:\DirA\DirB\DirC
在阅读MSDN关于的文章时,我对构建有效路径名的许多不同方式感到有点困惑。不同的Windows文件系统(FAT16、FAT32、NTFS等)似乎有不同的命名约定
我应该使用什么样的路径名格式,以便我的应用程序能够使用多个不同版本的Windows在本地驱动器C:
上的特定目录中创建和打开文件?我对Windows 7、POSReady 7、Windows 10和Windows 10物联网企业(与Windows 10物联网不同)特别感兴趣
我正在使用Win32 APICreateFile()
函数创建/打开文件
我应该使用什么样的路径名格式,以便我的应用程序能够使用多个不同版本的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