代码之家  ›  专栏  ›  技术社区  ›  Richard Chambers

带有createfile()winapi的本地驱动器的Windows文件和路径名

  •  2
  • Richard Chambers  · 技术社区  · 6 年前

    在WindowsXP和Windows7上运行良好的应用程序突然出现了Windows10 Pro的问题。但是,对于Windows10iot Enterprise,它似乎工作正常。它在2018年5月的Windows 10上似乎也能正常工作,但在Windows 10的更新安装上,它却无法工作。

    经过一些调查,我们发现应用程序似乎无法在Windows10Pro中创建用于持久数据的文件集。

    进一步看,我们发现完整的路径名不正确。文件存储目录的路径名似乎在Windows XP和Windows 7中运行良好,但在Windows 10 Pro中运行不正常。

    生成的路径名看起来像这样(那些是路径反斜杠,而不是用于逃避字符的C/C++反斜杠):

    \C:\DirA\DirB\DirC
    

    虽然生成的正确路径名如下所示:

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

    正在阅读有关 Naming Files, Paths, and Namespaces ,我对有效路径名的构造方式有点困惑。不同的Windows文件系统(fat16、fat32、ntfs等)似乎有不同的命名约定。

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

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   Remy Lebeau    6 年前

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

    您应该使用:

    C:\DirA\DirB\DirC
    

    或者,如果你需要的话 access a pathname longer than MAX_PATH 不/不能选择新的 longPathAware Windows 10 1607版本中引入的功能:

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

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

    你不需要使用 \\.\C:\DirA\DirB\DirC 虽然它 工作。只是 be aware 那就是:

    这个 "\\.\" Prefix将访问win32设备命名空间,而不是win32文件命名空间。

    典型地 你会用到 \\.\ 只有在访问本地设备(如物理卷、串行/并行端口、命名管道、邮件槽等)时,才可以访问文件系统上的条目。