【发布时间】:2016-04-11 08:02:34
【问题描述】:
我需要在磁盘 (c:) 上使用通配符 (*.txt、*.jpeg、*.doc) 查找可变扩展文件。
我尝试了以下函数,但无法使其递归,并且无法正常工作:
void Recurse(LPCTSTR str)
{
WIN32_FIND_DATA file;
cout << "Value INPUT:" << str <<"\n";
HANDLE search_handle=FindFirstFile(str,&file);
if (search_handle) {
do {
if(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
strcmp(file.cFileName,"..")!=0
&& strcmp(file.cFileName,".")!=0
&& strcmp(file.cFileName,"$Recycle.Bin")!=0
&& strcmp(file.cFileName,"Recovery")!=0
&& strcmp(file.cFileName,"System Volume Information")!=0
&& strcmp(file.cFileName,"PerfLogs")!=0
&& strcmp(file.cFileName,"Windows")!=0)
{
str = file.cFileName;
cout << "Directory :" << file.cFileName <<"\n";
Recurse(str); // Function to remind new directory
} else {
if (file.cFileName == "*.txt") {
std::wcout << file.cFileName << std::endl; //Print files find with estension txt
}
}
} while(FindNextFile(search_handle,&file));
CloseHandle(search_handle);
}
}
当然,我用静态值 (*.txt) 尝试了它是否有效,但是当我从 main 中调用它时它不起作用:
Recurse("C:\\*");
【问题讨论】:
-
file.cFileName == "*.txt":这里,==不是通配符模式匹配运算符,它比较两个指针是否相等(它们不相等)。 -
好的,谢谢,但我的另一个问题是我不知道如何通过名称目录进行递归研究。
-
你看到
"Directory :"被打印了吗?我会在二元运算符周围加上括号,因为它们以奇怪的优先级进行评估(即if( (file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&)......不确定这是否是问题......
标签: c++