我在OS X 10.8主机上的VirtualBox中运行Windows 7。主机有一个共享文件夹,里面有一个名为>>>FILE<<<
的文件。显然,OS X本身对此类文件名没有任何问题。不幸的是,我似乎无法在Windows 7中打开此文件,因为名称中包含<
和>
。
在C中,此调用失败:
CreateFileW(
L"\\\\VBOXSVR\\ft1\\>>>FILE<<<",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
GetLastError
返回ERROR_INVALID_NAME
(123)。如果我将文件名更改为FILE
,我会得到一个有效的句柄,一切都很好。
Windows中是否有一种已知方法可以访问名称中包含无效字符的文件?假设一个高效的环境,没有对主机文件系统的直接写访问权。
答案 0 :(得分:2)
@ jcophenha的回答是在正确的轨道上。但是,如果您阅读the page that @jcopenha linked to,则表明\\?\
前缀仅适用于本地路径。您必须使用\\?\UNC\
前缀代替UNC路径,例如:
L"\\\\?\\UNC\\VBOXSVR\\ft1\\>>>FILE<<<"
答案 1 :(得分:1)
不允许在Windows文件名中使用<
和>
个字符。因此无法在Win32下打开该文件。
naming conventions文档列出了以下保留字符:
- &LT; (小于)
- &GT; (大于)
- :(冒号)
- “(双引号)
- /(正斜线)
- \(反斜杠)
- | (竖杆或竖管)
- ? (问号)
- *(星号)
Windows在这方面与* nix系统的区别很大。在* nix上,对于可以在文件中使用的字符,通常没有这样的OS强制限制。正如我的一位朋友在他试图删除一个名为*
的文件时发现的,并且遭受了最不幸的后果。
现在,可以想象使用本机API时这些限制不适用。您可以尝试使用NtCreateFile
打开文件。这可能会奏效!