C++ FindFirstFile始终返回无效句柄

C++ FindFirstFile始终返回无效句柄,c++,windows,C++,Windows,我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件 我使用的是Windows,Unicode是在我的编译器中预定义的 问题:FileHandle始终具有无效的\u句柄\u值。这是什么原因?我如何纠正它 我的最后一段代码如下所示: ListAllTxtFiles(L"C:\\Users\\Tnc\Desktop\\Yazılım Çalışmaları\\Projects\\Oyun Projem\\data\\SaveFiles\\"); void ListAllTxtFiles(c

我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件

我使用的是Windows,Unicode是在我的编译器中预定义的

问题:FileHandle始终具有无效的\u句柄\u值。这是什么原因?我如何纠正它

我的最后一段代码如下所示:

ListAllTxtFiles(L"C:\\Users\\Tnc\Desktop\\Yazılım Çalışmaları\\Projects\\Oyun Projem\\data\\SaveFiles\\");

void ListAllTxtFiles(const wchar_t *Directory)
{
    TCHAR Buffer[2048];
    wsprintf(Buffer, L"s%*.txt", Directory);//there are security considerations about this function

    WIN32_FIND_DATAW FindData;
    HANDLE FileHandle = FindFirstFileW(Buffer, &FindData);

    if (FileHandle == INVALID_HANDLE_VALUE)
    {
        printf("Could not find any files..\n");
    }
    else
    {
        do 
        {
            printf("Found %s\\%s\n", Directory, FindData.cFileName);

        } while (FindNextFile(FileHandle, &FindData));
        CloseHandle(FileHandle);
    }
}
应该是

wsprintf(Buffer, L"%s*.txt", Directory);

您的wsprintf格式字符串错误。

是否尝试打印来自的结果?
GetLastError
将为您回答此问题。很可能路径不正确。John已经回答了您的问题。
wsprintf()
中的格式字符串格式不正确,这会导致
Buffer
接收错误数据,因此
findfirstfile()
失败。另一方面,您直接使用的是
FindFirstFileW()
,因此
Buffer
应该声明为
WCHAR
,而不是
TCHAR
wsprintf()
应该声明为
wsprintfW()
。由于
cFileName
WIN32\u FIND\u DATAW
中是一个
WCHAR[]
,要将其打印为Unicode字符串,您需要使用
wprintf()
而不是
printf()
,或者至少在
printf()
中使用
%ls
而不是
%s
,谢谢。你的评论帮助我更好地理解了这个过程。如果你知道我花了多少时间来解决这个问题,你会因为悲伤而哭泣。谢谢:但我只能得到文件的第一个字母。例如,我得到一个名为“what”的dor.txt文件,只是字母w。为什么会出现这种情况?因为您可能应该使用
wprintf
或类似的工具进行打印?这就是问题所在。谢谢你的帮助。请接受答案,这样你就不会浪费人们的时间阅读已经解决的问题。
wsprintf(Buffer, L"%s*.txt", Directory);