【发布时间】:2014-08-09 07:28:15
【问题描述】:
我正在使用CreateFile 打开设备。一切正常,直到设备名称太长。
在文档中说:
在此函数的 ANSI 版本中,名称仅限于 MAX_PATH 个字符。要将此限制扩展到 32,767 个宽字符,请调用函数的 Unicode 版本并在路径前添加“\\?\”。有关详细信息,请参阅命名文件、路径和命名空间。
我正在尝试使用 CreateFileW 并将“\\?\”添加到路径中,但是得到了无效的句柄和
系统找不到指定的路径。
在 GetLastError() 中。
那么,这个技巧是否只对文件名有效,对设备名无效?有没有其他方法可以避免这个问题?
UPD1: 不带前缀的设备名称如下所示:
\\.\devicename\EndsBy:\name1.exe|EndsBy:\name2.exe。
代码:
CreateFileW(path.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0));
【问题讨论】:
-
你是在字面上加上
"\\?\",还是实际上在前面加上"\\\\?\\"? -
设备名称实际上是什么样的?你的代码是什么样的?
-
@ghostofstandardspast 实际上我在前面加上“\\\\?\\”,还尝试在前面加上“”\\\\?”和其他一些。
-
有一点要记住,
"\\?\"需要遵循绝对路径。它还将跳过一些规范化步骤,例如处理.和..,或删除尾随的点和空格。 -
请编辑您的问题并在那里包含您的代码和其他相关信息,而不是在评论中。
标签: c++ winapi visual-c++ file-io