Rekursive Dateisuchfunktion übersringt viele Dateien
-
danke erstmal für deine antowort.
Also das erste kann ich ja noch verstehen. Hab es selber übersehen. Kommt vom Copy&Past;-)Allerding habe ich erstens was gegen "wfd.cFileName ungleich ".." " weil das funktioniert wunderwar. Hab es mit einer Datei ausprobiert und es funktioniert.
Was ich jetzt aber noch ein bisschen verwirrend finde ist, dass aber immer noch das selbe bei rauskommt. Er überspring immernoch jede Menge Dateien.Um genau zu sein alle die er vorher auch übersprungen hat. Hab beide TextFiles vorher abgespeichert.
Also kann das mit dem Vergleich gar nicht mal so falsch sein!Den Dateien vom gewünschten Datentyp findet er ja
-
1. Grundsätzlich falsches Forum, sowas gehört eher in die WinAPI.
2. Du findest mit dieser Suche keine *.JPG, *.jpeg und *.JPEG oder andere Schreibweisen. Es wird wirklich nur nach *.jpg gesucht, also alles Kleinbuchstaben.
3. Was ist der Startordner, welcher du angibst? Und wie machst du das?
4. Als was bist du eingeloggt? Admin? User? Mit welchen Rechten?Grüssli
-
FFSearch("C:");So stoße ich die Suche an. Ich habe auf de Rechne voll Rechte. Und wenn ich in der Suche ja auch die Bilder finden bzw öffnen kann dass sollte es die Anwendung auf jeden Fall tun.
Das mit der Groß/Kleinschreibung habe ich geändert. War mir zwar noch nicht bewusst aber es ist gut zu wissen.Geändert hat sich aber an meinem Problem nichts. Vielleicht wollt ihr ja noch wissen, dass ich Windows XP Pro mit dem SP3 drin habe und das Programm mit dem VS2008 Pro kompiliere.
Hat jemand schon mal von euch versucht, meinen Code zu kompilieren bz auszufhren? Wenn ja, was bekommt ihr für ein Ergebnis?
-
// WFDStr.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY bool isDirectory = (WFDStr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; //...BTW: deine Namensgebung (Variablen) finde ich grässlich. Willst du dich nicht lieber an etwas halten was auch andere Programmierer verwenden (z.B. myVariable, myOtherVariable oder auch my_variable, my_other_variable)? Und vielleicht Namen vergeben die ohne kryptische Abkürzungen auskommen?
-
super:-) jetzt findet er auch alles was er finden soll:-) ich super, danke;-)
ja ich weiß..meine namen sind nicht so sonderlich aussagekräftig aber während ich ein bisschen rum teste reicht mir das vollkommend.
wenn ich aber weiß, dasses größer wird verwende ich schon andere namen;-)
-
secondsun schrieb:
super:-) jetzt findet er auch alles was er finden soll:-) ich super, danke;-)
Nein, ICH super, und gerne

ja ich weiß..meine namen sind nicht so sonderlich aussagekräftig aber während ich ein bisschen rum teste reicht mir das vollkommend.
wenn ich aber weiß, dasses größer wird verwende ich schon andere namen;-)Es passiert verdammt oft, dass Code der beim "Rumtesten" entstanden ist, in grössere Projekte übernommen wird.
Davon abgesehen: viele Programmierer schaffen es nicht, wenns wirklich um was geht auch "brav" umzuschalten. Auch das führt dazu dass sämtliche "Unsitten" die man sich beim "Rumtesten" erlaubt, früher oder später auch in Produktiv-Code landen.
-> immer halbwegs "sauberen" Code schreiben ist das einzig Wahre.
-
p.S.: du solltest auch berücksichtigen was jencas geschrieben hat (dessen Code im Übrigen auch schon den korrekten "is directory" Test enthalten hat):
jencas schrieb:
z.B. unterschlägst Dein Code alles, was von FindFirstFile() zurückgeliefert wird.
(...)
-
ich super, danke;-)Hoppla..Da war ich mit meinen Gedanken ganz wo anders würde ich sagen. Bestimmt weil es mal endlich funktioniert hat;-). Ich glaube ich wollte eigentlich nur sagen "ist super, danke;-) " oder so. Ist auch wurscht. Dafür liefer ich mal eben den gesamten Code mit vernünftigen Variablennamen;-) Dann sind alle zufrieden und jeder kann es sich kopieren;-)
void Rekursive_Dateisuchfunktion(string StartOrdner) { //Variablen definieren**** HANDLE DateiHandle; WIN32_FIND_DATA DateiStruktur; string StartFo2 = ""; string StartFoFE = StartOrdner + "\\*"; //Startverzeichnis //Rekursive Suche Starten DateiHandle = FindFirstFile(StartFoFE.c_str(),&DateiStruktur); do { string Ordner_oder_Datei = DateiStruktur.cFileName; //Gefundener Ordner oder Datei //Ein Ordner wurde gefunden if (((DateiStruktur.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0 ) && Ordner_oder_Datei != ".." && Ordner_oder_Datei !=".") { f <<StartOrdner + "\\" + DateiStruktur.cFileName<<endl; StartFo2 = StartOrdner + "\\" + DateiStruktur.cFileName; Rekursive_Dateisuchfunktion(StartFo2); } //Eine Datei wurde gefunden if (((DateiStruktur.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ) && Ordner_oder_Datei != ".." && Ordner_oder_Datei != ".") { f <<StartOrdner + "\\" + DateiStruktur.cFileName<<endl; } } while(FindNextFile(DateiHandle,&DateiStruktur)); FindClose(DateiHandle); }Für "f" wurde natürlich ein fstream genommen. Sollte alles passen und danke nochmal;-)
-
secondsun schrieb:
Allerding habe ich erstens was gegen "wfd.cFileName ungleich ".." " weil das funktioniert wunderwar. Hab es mit einer Datei ausprobiert und es funktioniert.
Ja, weil Du den Dateinamen ja vorher einem std::string zuweist und dieser über einen vernünftigen op != verfügt.
-
void Rekursive_Dateisuchfunktion(string StartOrdner) { //Variablen definieren**** HANDLE DateiHandle; WIN32_FIND_DATA DateiStruktur; string StartFo2 = ""; string StartFoFE = StartOrdner + "\\*"; //Startverzeichnis //Rekursive Suche Starten DateiHandle = FindFirstFile(StartFoFE.c_str(),&DateiStruktur); do { string Ordner_oder_Datei = DateiStruktur.cFileName; //Gefundener Ordner oder Datei //Ein Ordner wurde gefunden if ((DateiStruktur.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0 ) { if (Ordner_oder_Datei != "." && Ordner_oder_Datei != "..") { f <<StartOrdner + "\\" + DateiStruktur.cFileName<<endl; StartFo2 = StartOrdner + "\\" + DateiStruktur.cFileName; Rekursive_Dateisuchfunktion(StartFo2); } } else { f <<StartOrdner + "\\" + DateiStruktur.cFileName<<endl; } } while(FindNextFile(DateiHandle,&DateiStruktur)); FindClose(DateiHandle); }würde ich persönlich bevorzugen. Erspart
a) einen unnötigen Vergleich von DateiStruktur.dwFileAttributes und
b) eliminiert den unnötigen Vergleich von Dateinamen gegen "." und ".."