gpt4 book ai didi

c++ - CreateFile() 返回 INVALID_HANDLE_VALUE (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:01 24 4
gpt4 key购买 nike

考虑:

void main()
{
LPSTR FileName;
FileName = "C:\\test2.wav";
hFile = CreateFile((LPCWSTR)FileName, GENERIC_READ, 0, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
cout << "INVALID_HANDLE_VALUE" << endl;
return;
}
}

这个程序总是打印“INVALID_HANDLE_VALUE”。为什么?文件 C:\test2.wav 存在。

最佳答案

您误解了转换的工作原理。你对编译器说的是假装 FileName 是一个宽字符串,但事实并非如此你的代码失败了。两种解决方案

1) 使用正确的字符串类型(在您的情况下是宽字符串)

LPTSTR FileName;
FileName = _T("c:\\test2.wav");
hFile = CreateFile(FileName, GENERIC_READ, 0 , 0,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);

2) 使用需要窄字符串的 CreateFile 版本(称为 CreateFileA)

LPSTR FileName;
FileName = "c:\\test2.wav";
hFile = CreateFileA(FileName, GENERIC_READ, 0 , 0,
OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);

这是新手代码的一个共同特征,它在所有地方都进行了强制转换。尽量避免转换,因为它通常只是隐藏错误(就像你的转换一样)。如果您不了解转换的工作原理,则尤其如此。不幸的是,没有一定数量的转换就不可能进行 Windows 编程。

关于c++ - CreateFile() 返回 INVALID_HANDLE_VALUE (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com