C++ FindFirstFile始终返回无效句柄
我的目标是列出特定目录中的文本文件,并让用户加载其中一个文件 我使用的是Windows,Unicode是在我的编译器中预定义的 问题:FileHandle始终具有无效的\u句柄\u值。这是什么原因?我如何纠正它 我的最后一段代码如下所示: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
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);