C++ 使用内置Windows方法获取文件夹的内容
我的目标是只使用C++/Windows的内置方法(我认为我的C++版本不支持std::filesystem)来获取文件夹中的文件名 现在我有这个: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
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:“您还会发现,*.
本身与*
相同。”。