C++ win32 API createFile函数:转换为LPCTSTR

C++ win32 API createFile函数:转换为LPCTSTR,c++,winapi,C++,Winapi,我有以下代码,它从函数中获取文件名,然后将其传递到createFile(扩展为createFileA)。前面的一个问题告诉我使用file.c_str()将文件名转换为createFileA使用的LPCTSTR。但是,这不起作用,因为每次调用createFileA时文件的句柄都无效。我做错了什么 string file = getFilename(); HANDLE hf = CreateFile(file.c_str(),GENERIC_READ | GENERIC_WRITE,(DWORD)

我有以下代码,它从函数中获取文件名,然后将其传递到createFile(扩展为createFileA)。前面的一个问题告诉我使用file.c_str()将文件名转换为createFileA使用的LPCTSTR。但是,这不起作用,因为每次调用createFileA时文件的句柄都无效。我做错了什么

string file = getFilename();
HANDLE hf = CreateFile(file.c_str(),GENERIC_READ | GENERIC_WRITE,(DWORD) 0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
if (hf == INVALID_HANDLE_VALUE)
   {
     MessageBox( hwnd,"CreateFile","Error", MB_OK);
   }
如果编译,那么.c_str()必须是正确的类型


错误\u无效\u名称最常见的原因是文件名中的非法字符、额外的“:”或选项卡,或者您使用的是保留文件名。根据问题的注释检查文件名的值。问题是您提供的名称包含
。此字符对于windows中的文件名是非法的,是问题的根源。删除该字符,代码应该可以正常工作

我刚刚注意到,如果您使用以下代码

std::stringstream-ss;
ss什么错误代码
GetLastError
返回?错误\u无效\u名称123(0x7B)文件名、目录名或卷标语法不正确。如果在调试器下运行此操作,
file.c\u str()
返回什么?抱歉,我应该将其包含在错误中:它返回2012-6-1\u 17:10:40:475.bmpow,我应该想到这一点,但冒号在windows文件名中是非法的。谢谢你的帮助。