我不明白这个错误。我一直试图列出目录中的文件,但是我不理解这个错误。

这是我下面的代码;
#include <Windows.h>
#include <iostream>
using namespace std;
int main() {
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
LPCWSTR file = L"*.cpp";
hFindFile = FindFirstFile(file,&FindFileData);
if(INVALID_HANDLE_VALUE == hFindFile)
{
cout << "Error in Finding File" << endl;
cout << "Error - " << GetLastError() << endl;
}
else
{
cout << "File Found" << endl;
wcout << "File Name - " << FindFileData.cFileName << endl;
wcout << "File Size - " << FindFileData.nFileSizeLow << endl;
}
return 0;
}发布于 2022-05-02 20:10:50
您正在使用TCHAR-based Win32 API,它们是预处理器宏,映射到ANSI或UNICODE功能风格、结构类型等。
您显然没有用UNICODE定义编译项目,因此宏正在映射到它们的ANSI版本(即:WIN32_FIND_DATA -> WIN32_FIND_DATAA、FindFirstFile() -> FindFirstFileA()等)。有关更多详细信息,请参见MSDN上的使用Strings。
您正在尝试将一个Unicode字符串传递给FindFirstFileA(),后者需要一个窄的ANSI字符串,因此出现了错误。同样明显的是,您期待的是API的Unicode版本,因为您试图将FindFileData.cFileName传递给std::wcout而不是std::cout。
尝试使用TCHAR字符串,这样代码就可以用于ANSI或UNICODE编译(老实说,自Win9x/ME以来就不再需要这种编译了)。自NT4/XP以来,现代Windows一直是一个完整的Unicode操作系统:
#include <Windows.h>
#include <iostream>
#ifdef UNICODE
#define t_cout std::wcout
else
#define t_cout std::cout
#endif
int main() {
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
LPCTSTR file = TEXT("*.cpp");
hFindFile = FindFirstFile(file, &FindFileData);
if (INVALID_HANDLE_VALUE == hFindFile)
{
DWORD err = GetLastError();
std::cout << "Error in Finding File\n";
std::cout << "Error - " << err << '\n';
}
else
{
std::cout << "File Found\n";
t_cout << TEXT("File Name - ") << FindFileData.cFileName << TEXT('\n');
ULARGE_INTEGER filesize;
filesize.LowPart = FindFileData.nFileSizeLow;
filesize.HighPart = FindFileData.nFileSizeHigh;
std::cout << "File Size - " << filesize.QuadPart << '\n';
FindClose(hFindFile);
}
return 0;
}否则,直接使用ANSI API:
#include <Windows.h>
#include <iostream>
int main() {
WIN32_FIND_DATAA FindFileData;
HANDLE hFindFile;
LPCSTR file = "*.cpp";
hFindFile = FindFirstFileA(file, &FindFileData);
if (INVALID_HANDLE_VALUE == hFindFile)
{
DWORD err = GetLastError();
std::cout << "Error in Finding File\n";
std::cout << "Error - " << err << '\n';
}
else
{
std::cout << "File Found\n";
std::cout << "File Name - " << FindFileData.cFileName << '\n';
ULARGE_INTEGER filesize;
filesize.LowPart = FindFileData.nFileSizeLow;
filesize.HighPart = FindFileData.nFileSizeHigh;
std::cout << "File Size - " << filesize.QuadPart << '\n';
FindClose(hFindFile);
}
return 0;
}或者,直接使用Unicode API:
#include <Windows.h>
#include <iostream>
int main() {
WIN32_FIND_DATAW FindFileData;
HANDLE hFindFile;
LPCWSTR file = L"*.cpp";
hFindFile = FindFirstFileW(file, &FindFileData);
if (INVALID_HANDLE_VALUE == hFindFile)
{
DWORD err = GetLastError();
std::cout << "Error in Finding File\n";
std::cout << "Error - " << err << '\n';
}
else
{
std::cout << "File Found\n";
std::wcout << L"File Name - " << FindFileData.cFileName << L'\n';
ULARGE_INTEGER filesize;
filesize.LowPart = FindFileData.nFileSizeLow;
filesize.HighPart = FindFileData.nFileSizeHigh;
std::cout << "File Size - " << filesize.QuadPart << '\n';
FindClose(hFindFile);
}
return 0;
}https://stackoverflow.com/questions/72091800
复制相似问题