c++ - 如何在 Windows 中使用 FindNextFile 调用列出目录内容?
问题描述
我有一小段代码旨在使用 Windows API 列出目录的内容。
代码:
#include <iostream>
#include <Windows.h>
int wmain() {
WIN32_FIND_DATA data;
std::string dir = "c:\\* ";
HANDLE hFind = FindFirstFileA(dir.c_str(), &data); // DIRECTORY
if (hFind != INVALID_HANDLE_VALUE) {
do {
std::cout << data.cFileName << std::endl;
} while (FindNextFileW(hFind, &data));
FindClose(hFind);
}
return 0;
}
错误:
Error C2664 'HANDLE FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA)': cannot convert argument 2 from 'WIN32_FIND_DATA *' to 'LPWIN32_FIND_DATAA'
错误会根据我的修复尝试而改变。我尝试了以下方法:
- 试图更改
FindFirstFile
为FindFirstFileW
/FindNextFileA
- 试图
L
在目录字符串前面放一个L"C:\\*"
我查看了以下相关问题:
但没有得到它成功列出的内容。我得到的最接近的是这段代码,它编译时没有错误:
#include <windows.h>
#include <iostream>
int main()
{
WIN32_FIND_DATA data;
HANDLE hFind = FindFirstFileW(L"C:\\*", &data);
if (hFind != INVALID_HANDLE_VALUE) {
do {
std::cout << data.cFileName << std::endl;
} while (FindNextFileW(hFind, &data));
FindClose(hFind);
}
}
这可以编译,但是当我运行二进制文件时,它会输出:
0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C 0000009A9DBAF32C
FindNextFile
当我们这样做时,FindNextFileA
和之间有什么区别FindNextFileW
?我觉得这个问题与这些有关?
解决方案
FindNextFile
是一个宏,根据是否定义 (and )解析为FindNextFileA
(ANSI) 或(Unicode UTF16-LE )。FindNextFileW
UNICODE
_UNICODE
因此,您可以根据需要更改WIN32_FIND_DATA
为WIN32_FIND_DATAA
参数FindFirstFileA
的 ANSI 版本。
有关定义UNICODE
和__UNICODE
推荐阅读
- javers - Javers 是否支持 DB2 和 DB2/400?
- json - pgAdmin:将 null JSONB 转换为 JSON 返回连接已关闭
- sum - JasperReport 中的分组和汇总记录
- jira - 将 Jira 附件同步到 Confluence 页面
- python - 如何使用 Popen 在子进程中读取 json 文件,因为终端中有 33766 限制
- vb.net - 机器人回复特定消息的 DM。不和谐网
- python - 如何在python中使用一个键添加多个项目?
- jquery - 双击HTML表格中的行时如何删除背景颜色?
- java - 在指定文件夹中找不到 Java 安装错误 - Glassfish 配置
- java - RecyclerView 不显示任何项目并且不调用任何自定义适配器的函数