C++ 使用内置Windows方法获取文件夹的内容

C++ 使用内置Windows方法获取文件夹的内容,c++,windows,C++,Windows,我的目标是只使用C++/Windows的内置方法(我认为我的C++版本不支持std::filesystem)来获取文件夹中的文件名 现在我有这个: HANDLE hFind; WIN32_FIND_DATA data; hFind = FindFirstFile("C:\\Folder\\*", &data); if (hFind != INVALID_HANDLE_VALUE) { do { //Process File

我的目标是只使用C++/Windows的内置方法(我认为我的C++版本不支持std::filesystem)来获取文件夹中的文件名

现在我有这个:

HANDLE hFind;
    WIN32_FIND_DATA data;
    hFind = FindFirstFile("C:\\Folder\\*", &data);
    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            //Process File Name
            std::wstring ws(data.cFileName);
        } while (FindNextFile(hFind, &data));
        FindClose(hFind);
    }
它似乎返回空白名称,而不是文件夹中文件的名称


我是否正确使用此FindFirstFile函数?有更好的方法吗?

您的代码无法如图所示编译。您正在调用ANSI版本的
FindFirstFile()
(通过向其传递窄的ANSI字符串文字而不是宽的Unicode字符串文字),并且
std::wstring
没有接受
char[]
作为输入的构造函数

除了这个错误,您还忽略了
数据.dwFileAttributes
字段以区分文件和子文件夹,对于子文件夹,您没有检查
数据的内容。cFileName
忽略了
”。
特殊文件夹名称

试试这个:

WIN32_FIND_DATAW数据;
HANDLE hFind=FindFirstFileW(L“C:\\Folder\\\*”,&data);
if(hFind!=无效的句柄值)
{
做
{
if((data.dwFileAttributes和文件属性目录)==0)
{
//进程文件名
std::wstring ws(data.cFileName);
...
}
其他的
{
如果((lstrcmpW(data.cFileName,L.“)!=0)&&
(lstrcmpW(data.cFileName,L.“.”!=0))
{
//进程文件夹名称
std::wstring ws(data.cFileName);
...
}
}
}
while(FindNextFileW(hFind和data));
FindClose(hFind);
}

您的代码无法如图所示编译。您正在调用ANSI版本的
FindFirstFile()
(通过向其传递窄的ANSI字符串文字而不是宽的Unicode字符串文字),并且
std::wstring
没有接受
char[]
作为输入的构造函数

除了这个错误,您还忽略了
数据.dwFileAttributes
字段以区分文件和子文件夹,对于子文件夹,您没有检查
数据的内容。cFileName
忽略了
”。
特殊文件夹名称

试试这个:

WIN32_FIND_DATAW数据;
HANDLE hFind=FindFirstFileW(L“C:\\Folder\\\*”,&data);
if(hFind!=无效的句柄值)
{
做
{
if((data.dwFileAttributes和文件属性目录)==0)
{
//进程文件名
std::wstring ws(data.cFileName);
...
}
其他的
{
如果((lstrcmpW(data.cFileName,L.“)!=0)&&
(lstrcmpW(data.cFileName,L.“.”!=0))
{
//进程文件夹名称
std::wstring ws(data.cFileName);
...
}
}
}
while(FindNextFileW(hFind和data));
FindClose(hFind);
}

@HansPassant自Win95以来,
*
可以很好地查找具有扩展名的文件,
*
*.
实际上就
FindFirstFile()
而言是相同的。Per:“
”*”
为您提供所有文件。
“****”
为您提供…所有文件”。Per:“您还将发现,
*.
本身与
*
相同”。@HansPassant自Win95以来,
*
可以很好地查找具有扩展名的文件,
*
*.
实际上与
FindFirstFile()
是一样的。Per:“
”*”
为您提供所有文件。
“****”
为您提供…所有文件”。Per:“您还会发现,
*.
本身与
*
相同。”。