[英]Find file with wildcards on entire disk
I need to find a variable extension file using wildcards ( *.txt
, *.jpeg
, *.doc
) on a disk ( c:
). 我需要在磁盘上使用通配符(
*.txt
, *.jpeg
, *.doc
)找到一个变量扩展文件( c:
*.doc
。
I tried with the following function, but I can't make it recursive, and it's not working: 我尝试使用以下函数,但我无法使其递归,并且它不起作用:
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);
}
}
Of course I tried it with a static value ( *.txt
) to see if it worked, but it didn't work when I called it from in main: 当然我尝试使用静态值(
*.txt
)来查看它是否有效,但是当我在main中调用它时它不起作用:
Recurse("C:\\*");
I modified the code in this way. If it finds them throwing me * .txt files and me brings them correctly, but the path instead in many files shows me incorrect with several strange characters. I can not understand why such behavior.
char *my1;
char *my2;
char *my3;
char *my4;
char *cp2;
LPCTSTR ori;
std::string stringa_mia;
std::vector<std::string> listafiles;
std::vector<std::string> listapath;
void Recurse(LPCTSTR str, LPCTSTR ori)
{
WIN32_FIND_DATA file;
cp2 = strdup(str);
strcat(cp2, "\\*");
HANDLE search_handle=FindFirstFile(cp2,&file);
BOOL res = TRUE;
if (search_handle)
{
while(search_handle != INVALID_HANDLE_VALUE && res)
{
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
&& strcmp(file.cFileName,"Program Files")!=0
&& strcmp(file.cFileName,"Boot")!=0
&& strcmp(file.cFileName,"Program Files (x86)")!=0
&& strcmp(file.cFileName,"AppData")!=0
&& strcmp(file.cFileName,"ProgramData")!=0
&& strcmp(file.cFileName,"Cookies")!=0
&& strcmp(file.cFileName,".android")!=0
&& strcmp(file.cFileName,"Programmi")!=0
)
{
my3 = strdup(file.cFileName);
my2 = strdup(str);
my1 = strdup(ori);
strcat(my2, "\\");
strcat(my2, my3);
CloseHandle(search_handle);
Recurse(my2,ori);
}
else
{
my4 = strdup(file.cFileName);
stringa_mia = std::string(my4);
if (stringa_mia.find(".txt")!=std::string::npos) {
listafiles.push_back(stringa_mia);
listapath.push_back(str);
}
}
res = FindNextFile(search_handle,&file);
}
CloseHandle(search_handle);
}
}
i call the function in this mode: 我在这种模式下调用该函数:
Recurse("C:","C:"); 递归( “C:”, “C:”);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.