CreateFileA失败,读取文本文件的\u句柄\u值错误无效

CreateFileA失败,读取文本文件的\u句柄\u值错误无效,file,winapi,File,Winapi,我正在尝试在Win32应用程序中读取一个简单的文本文件。但是我在下面的代码中得到无效的\u句柄\u值错误 void Avatar::readData(LPCSTR filename) { LPVOID data[4096] = {}; HANDLE hFile; MessageBox(NULL, (LPCWSTR)filename, L"File", MB_OK); hFile = CreateFileA(filename, GENERIC_READ, FILE_

我正在尝试在Win32应用程序中读取一个简单的文本文件。但是我在下面的代码中得到无效的\u句柄\u值错误

void Avatar::readData(LPCSTR filename)
{
    LPVOID data[4096] = {};
    HANDLE hFile;
    MessageBox(NULL, (LPCWSTR)filename, L"File", MB_OK);
    hFile = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL, L"Failed to CreateFile - 'hFile'", L"ERROR", MB_OK);
    }

    DWORD fileSize = GetFileSize(hFile, &fileSize);
    DWORD read = -1;
    if (!ReadFile(hFile, static_cast< LPVOID >(&data), 4096, &read, NULL))
    {
        DWORD err = GetLastError();
        MessageBox(NULL, L"Failed to ReadFile - 'hFile'", L"ERROR", MB_OK);
    }
    CloseHandle(hFile);
}
void Avatar::readData(LPCSTR文件名)
{
LPVOID数据[4096]={};
处理文件;
MessageBox(NULL,(LPCWSTR)文件名,L“File”,MB_OK);
hFile=CreateFileA(文件名、通用读取、文件共享读取、NULL、打开现有、文件属性正常、文件标志重叠、NULL);
if(hFile==无效的句柄值)
{
MessageBox(NULL,L“创建文件失败-'hFile'”,L“错误”,MB_OK);
}
DWORD fileSize=GetFileSize(hFile,&fileSize);
DWORD read=-1;
if(!ReadFile(hFile,static_cast(&data),4096,&read,NULL))
{
DWORD err=GetLastError();
MessageBox(NULL,L“无法读取文件-'hFile'”,L“ERROR”,MB_OK);
}
闭合手柄(hFile);
}

有人能帮我解决吗?

你试过了吗?还有
文件名中的内容是什么?您不能将
LPCSTR
强制转换为
LPCWSTR
。在MessageBox()调用中将LPCSTR强制转换为LPCWSTR会让我有点畏缩。我建议你评论这句话,看看行为是否仍然相同。除此之外,它失败的原因可能有很多,例如您的用户帐户、您尝试访问的路径。。。除此之外,GetLastError()可能会像前面提到的那样有所帮助。我建议不要使用消息框,而是在调试器中检查路径的正确性。我还建议,如果您发现了错误条件(并将其报告给用户/记录了它/etc),则不应仅使用此方法,就好像句柄是有效的一样。我希望在这些错误路径中返回