win32 API createFile 函数:转换为 LPCTSTR
win32 API createFile function: converting to an LPCTSTR
我有以下代码,它从函数中获取文件名,然后将其传递给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() 必须是正确的类型!
ERROR_INVALID_NAME最常见的原因是文件名中的非法字符、额外的":"或制表符,或者您使用的是保留的文件名。 检查文件名的值
根据对问题的评论,问题是您提供的名称包含:
。 此字符对于窗口中的文件名是非法的,并且是问题的根源。 删除该字符,代码应该可以正常工作
我刚刚注意到,如果您使用以下代码
std::stringstream ss;ss <<"C:\filename.txt" <<p>然后执行 ss.str() 以转到 std::string。然后,如果您执行c_str()传递给创建文件
这不适用于创建文件,并且很难跟踪根本原因但它是"endl;",它被流式传输到缓冲区中,因此路径将是无效的
它将始终报告错误 123 无效的文件名
宽版本也会发生这种情况。
相关文章:
- 如何在Windows上将Qt QString转换为LPCTSTR
- 将 LPSTR 转换为 LPCTSTR
- 无法从'const char *'转换为'LPCTSTR'
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 将浮点数转换为 LPCTSTR 转换
- 将WCHAR转换为LPCTSTR
- 将cryptopp :: Integer转换为lpctstr
- 仅分配第一个字符,将 LPCTSTR 转换为字符*
- 如何将 LPTSTR 转换为 LPCTSTR&
- 如何将char []转换为lpctstr
- CString 到 LPCTSTR 的转换会中断 sql 查询
- 无法将参数 1 从"const char [5]"转换为"LPCTSTR"
- CString 到 LPCTSTR 的转换
- LPCTSTR 到 LPCSTR 的转换
- 如何将字符数组转换为 LPCTSTR
- 错误 C2664:'CComboBox::InsertString':无法将参数 2 从 'const char [4]' 转换为 'LPCTSTR'
- 使用 sstream 将 int 转换为 LPCTSTR 时出现奇怪的结果
- 无法在 MFC / C++ 项目中将参数 1 从'const wchar_t *'转换为'LPCTSTR'
- win32 API createFile 函数:转换为 LPCTSTR
- 字符串转换为LPCTSTR