RemoveDir gibt immer false zurück
-
void __fastcall TForm1::RemoveDirectory(AnsiString APath) { if(!DirectoryExists(APath)) { return; } AnsiString Path = APath + "\\*"; HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile(Path.c_str(),&wfd); do { // Eintrag nur behandeln, wenn es nicht . oder .. ist (werden nur bei Unterverzeichnissen mit zurückgeliefert) // hier könnte man z.B. auch mit lstrcmp auf . und .. vergleichen, was allerdings nicht ganz so effizient ist if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )) { AnsiString FilePath = APath + "\\" + wfd.cFileName; if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { this->RemoveDirectory(FilePath); } else { DeleteFile(FilePath); } } } while (FindNextFile(fHandle,&wfd)); FindClose(fHandle); RemoveDir(APath); }
Ich weiß nicht woran es liegt. Wenn ich diese Funktion aufrufe, dann wird dieser Ordner nur leer gemacht. Wenn der Ordnerpfad nicht exestieren würde, dann würde die Funktion schon in den ersten Zeilen beendet werden und nicht den Ordner leer machen.
Der Ordnerpfad muss also richtig sein.
Trotzdem gibt RemoveDir(APath) immer false zurück.
Weiß jemand, wo der Fehler liegt?
-
Hi,
RemoveDir gibt keinen Wert zurück. Versuche mal mit
BOOL RemoveDirectory( LPCTSTR lpPathName // address of directory to remove );
mfg
kpeter
-
Mit der Funktion wird mein Ordner auch nicht gelöscht.
-
Der Code in diesem Link ist ähnlich deinem . Da ist ein GetLastError-Aufruf.
Vielleicht hilft das, der Sache auf den Grund zu kommen.http://www.codeproject.com/KB/files/deletedir.aspx
mfg
kpeter
-
mach den rekursiveb Aufruf "RemoveDirectory" NICHT in der Schleife.
Sammle alle Verz.- Namen in einer Stringliste und arbeite die NACH der Suchschleife als Rekursionsruf in ner eigenen Schleife ab!
-
Ich vermute mal du spielst auf die Tatsache an, dass man Ordner nur nach dem Aufruf von FindClose() löschen kann.
Ich werd mir deinen Tipp zu Herzen nehmen, aber auch wenn der Ordner keine Unterordner hat, läst sich der Ordner nicht löschen.
-
Neee,
ich hab die Erfahrung gemacht, dass der SearchReacord gestört wird , bei rekursiven Aufrufen!(ist zumnindest so beim BCN 4.0)
So wie angeraten hate es bisher IMMER geklappt.
Gruss
Frank