Verzeichnis durchsuchen
-
Hallo,
ich habe da ein pikantes problem. der ablauf des folgenden codes soll so aussehen:
- durchsuche das gesamte verzeichnis mit übergebenen pfad und suchwort
- wenn du auf eine datei / einen ordner stößt die genau dem selben namen hat, gib TRUE zurück
- wenn du in dem gesamten verzeichnis nichts findest, gib FALSE zurücknun hier erstmal der code
funktionsaufruf
if(exist("\\*","Save"))
bool exist(AnsiString Path, AnsiString target){ HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile(Path.c_str(),&wfd); do{ FindNextFile(fHandle,&wfd); AnsiString File = wfd.cFileName; if(File == target) return true; }while(FindNextFile(fHandle,&wfd)); return false; }
das problem ist, die funktion gibt immer nur FALSE zurück. nach meiner fehleranalyse steckt die ursache meiner meinung nach in
if(File == target) // File = die datei die die funktion gerade hat | target = das suchwort was übergeben wird
wenn ich die abfrage ändern würde in
if(File == "abc.exe")
würde er die abc.exe erkennen und TRUE zurückgeben. also wird ja "File" korrekt ausgelesen und "target" wird auch korrekt übergeben, nur die funktion will die 2 variablen nich als gleich erkennen. was kann ich tun?
mfg
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Nimm "strcmp" zum vergleichen...
Bei Rückgabewert 0 sind die strings identisch!Gruß
Sascha
-
is immernoch das selbe
bool exist(AnsiString Path, AnsiString target){ HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile(Path.c_str(),&wfd); do{ FindNextFile(fHandle,&wfd); AnsiString File = wfd.cFileName; if(strcmp (File.c_str(),target.c_str()) == 0) return true; }while(FindNextFile(fHandle,&wfd)); return false; }
if(strcmp (File.c_str(),target.c_str()) == 0)
funktioniert wieder nicht
if(strcmp ("abc.exe",target.c_str()) == 0)
is wieder true
... aber File wird auch korrekt ausgelesen
-
Wieso hast Du eigentlich FindNextFile() innerhalb von do() und nochmal in der while()-Bedingung? So überspringst Du doch Dateien?
-
hab jetzt mitlerweile
while(FindNextFile(fHandle,&wfd)){ FindNextFile(fHandle,&wfd); AnsiString File = wfd.cFileName; if(strcmp (File.c_str(),target.c_str()) == 0) return true; }
da überspring ich nur noch 3 sachen. einmal ".", ".." und die erste. nur hab ich 14 dateien im ordner und ich finde nur 8.
-
?! Du überspringst jedesmal beim Betreten der while()-Schleife eine Datei, weil FindNextFile() direkt zweimal hintereinander aufgerufen wird (einmal durch die while-Bedingung und einmal durch den Aufruf in der while-Schleife selbst)
-
while(FindNextFile(fHandle,&wfd)){ // <-- Aufruf FindNextFile() FindNextFile(fHandle,&wfd); // <-- Dieser Aufruf von FindNextFile() ist zuviel und muss weg AnsiString File = wfd.cFileName; if(strcmp (File.c_str(),target.c_str()) == 0) return true; }
-
ok habs jetzt, funktioniert. gott war das ne geburt
bool exist(AnsiString Path, AnsiString target){ HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile(Path.c_str(),&wfd); while(FindNextFile(fHandle,&wfd)){ AnsiString File = wfd.cFileName; if(strcmp(File.c_str(),target.c_str())==0){ FindClose(fHandle); return true; } } FindClose(fHandle); return false; }
danke euch
-
Ich würde eher "stricmp" verwenden...
-
Du überspringst immernoch ein File ....
bool exist(AnsiString Path, AnsiString target){ HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile(Path.c_str(),&wfd); //<--- dieses Suchergebniss möchte auch gern beachtet werden :clown: while(FindNextFile(fHandle,&wfd)){ AnsiString File = wfd.cFileName; if(strcmp(File.c_str(),target.c_str())==0){ FindClose(fHandle); return true; } } FindClose(fHandle); return false; }