我实现了下面的函数来列出一个目录的内容,但是当我编译和链接程序时,编译器给了我以下两个错误。
错误C2664:"HANDLE FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW)":无法将参数2从 "LPWIN32_FIND_DATA *"转换为 "LPWIN32_FIND_DATAW"。
错误C2664:"BOOL FindNextFileW(HANDLE,LPWIN32_FIND_DATAW)":无法将参数2从 "LPWIN32_FIND_DATA *"转换为 "LPWIN32_FIND_DATAW
bool FmListDirectoryContents(LPWSTR arg_path_dir)
{
LPWIN32_FIND_DATA wfd_Data;
wchar_t c_Path[2048];
wprintf(c_Path, "%s\\*", arg_path_dir);
HANDLE h_Find = FindFirstFileW(c_Path, &wfd_Data);
if (h_Find != INVALID_HANDLE_VALUE) {
PrintColorful(5, L"\n\t%s\t\t\t%s", "-----------", "-----------");
PrintColorful(5, L"\n\t%s\t\t\t%s", "File Size", "File Name");
PrintColorful(5, L"\n\t%s\t\t\t%s\n", "-----------", "-----------");
do {
ULONGLONG FileSize = wfd_Data->nFileSizeHigh;
FileSize <<= sizeof(wfd_Data->nFileSizeHigh) * 8;
FileSize |= wfd_Data->nFileSizeLow;
printf("\n\t%llu\t\t\t\t%s", FileSize, wfd_Data->cFileName);
} while (FindNextFileW(h_Find, &wfd_Data));
printf("\n\n");
FindClose(h_Find);
}
return true;
}
怎样才能把这段代码修正为能用Unicode格式工作。我实现了下面的函数来列出一个目录的内容,但是当我编译和链接程序时,编译器给了我以下两个错误:错误C2664:'HANDLE ...'。FindFirstFileW()
你正在传递 FindNextFileW()
和 WIN32_FIND_DATA
指向指针的指针 WIN32_FIND_DATAW
但这并不是他们所期望的,因此出现了编译器错误。 他们想要的是一个指向
而不是。printf()
你也在滥用 wprintf()
和
.
bool FmListDirectoryContents(LPWSTR arg_path_dir)
{
WIN32_FIND_DATAW wfd_Data; // <-- not LPWIN32_FIND_DATA!
wchar_t c_Path[2048];
swprintf(c_Path, L"%s\\*", arg_path_dir); // <-- not wprintf!
HANDLE h_Find = FindFirstFileW(c_Path, &wfd_Data);
if (h_Find != INVALID_HANDLE_VALUE) {
PrintColorful(5, L"\n\t%s\t\t\t%s", "-----------", "-----------");
PrintColorful(5, L"\n\t%s\t\t\t%s", "File Size", "File Name");
PrintColorful(5, L"\n\t%s\t\t\t%s\n", "-----------", "-----------");
do {
ULARGE_INTEGER FileSize;
FileSize.HighPart = wfd_Data->nFileSizeHigh;
FileSize.LowPart = wfd_Data->nFileSizeLow;
wprintf(L"\n\t%llu\t\t\t\t%s", FileSize.QuadPart, wfd_Data->cFileName); // <-- not printf!
}
while (FindNextFileW(h_Find, &wfd_Data));
FindClose(h_Find);
wprintf(L"\n\n");
}
return true;
}
试试这个。 LPWIN32_FIND_DATAW
你选择你将手动指定使用Unicode API,所以你必须使用 W
夫 LPWIN32_FIND_DATA
)而不是
.FindFirstFileW
另外,第2个论点的 FindNextFileW
和 LPWIN32_FIND_DATAW
是类型 LPWIN32_FIND_DATAW
因此,将一个指针传递给 LPWIN32_FIND_DATAW
.WIN32_FIND_DATAW
已经是一个指向 WIN32_FIND_DATAW
所以你必须分配一个类型为
并传递一个指针给该指针。