我正在使用Windows操作系统,并使用vc++2010和MFC。
以下是我的代码:
CFile File;
TCHAR lpCause[1024];
CFileException eException;
CString strErrorMessage;
// a very long file path name means a file name over 255 characters
if (!File.Open(_T("a very long file path name"), CFile::modeCreate, &eException))
{
eException.GetErrorMessage(lpCause, 1024);
strErrorMessage = lpCause;
}
else
File.Close();
当我运行代码时,收到错误信息:"一个非常长的文件路径名包含了不正确的路径"。
我的问题是:
- 如何修改我的代码使之能够工作?
- 我了解到
CreateFile()
函数可以在文件路径的开头添加"\\\\?\"
,这样它就可以扩展到32767
个宽字符。在MFC中,我该如何做同样的事情?
CFile
只是标准Windows API的一个抽象。在下面的某个地方会调用CreateFile
。请记住,字符串字面量中的所有反斜杠都需要转义。 - Some programmer dudeCreateFileW
可以使用长路径,而CreateFileA
则硬性限制在大约256个字符。因此,您需要显式地使用W
API和WCHAR
字符串,而不是TCHAR
。 - RbMm!File.Open(_T("\\\\?\\一个非常长的文件路径名")
? - JabberwockyAllocateDestinationString
调用RtlAnsiStringToUnicodeString
。这与其新的长路径支持无关,而且我IRC这始于Windows 8。当然,现在它只是有趣的小知识。早期版本使用静态缓冲区,限制转换为MAX_PATH
,并且文档仍要求长扩展路径使用Unicode。 - Eryk SunBasep8BitStringToDynamicUnicodeString
(很久没有看过这个了)。年度使用TEB
中的固定大小缓冲区。 - RbMm