Ich muss eine Datei mit variabler Erweiterung mit Platzhalter (*.txt
, *.jpeg
, *.doc
) auf einer Festplatte (c:
) finden.Datei mit Platzhaltern auf der gesamten Festplatte finden
Ich habe versucht, mit der folgenden Funktion, aber ich kann es nicht rekursiv machen, und es funktioniert nicht:
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);
}
}
Natürlich habe ich es mit einem statischen Wert versucht (*.txt
), um zu sehen, ob es funktioniert, aber es hat nicht funktioniert, wenn ich es aus in Haupt genannt:
Recurse("C:\\*");
'file.cFileName ==" * .txt "': Hier ist '==' kein Platzhalter für Mustervergleich, es vergleicht zwei Zeiger auf Gleichheit (und sie sind nicht gleich). – molbdnilo
ok danke, aber mein anderes Problem ist, dass ich nicht weiß, wie Namensverzeichnis für rekursive Forschung weitergegeben. –
Wird "Directory:" gedruckt? Ich würde Klammern um den binären Operator setzen, da sie mit seltsamer Priorität auswerten (dh 'if ((file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&') ... nicht sicher, ob das das Problem ist ... – urban