![]() |
RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Hallo Leute,
um sich nur aufs wesentliche zu fokusieren abstrahiere ich mal mein Problem... Ich habe ein Verzeichnis mit unterverzeichnissen mit FindFirst nach bestimmten Dateien durchsucht, diese gelöscht und zurück bleibt ein leerer Ordner, der nach der FindFirst-methode nicht mehr gelöscht werden kann ==> E/A-Fehler 32, welcher besagt, dass etwas zugriff auf diesen Ordner hat. Ist natürlich das Programm. Nur besteht der Zugriff seit der Suche bis zum Schließen des Programms, während der laufzeit kann der ordner also auch nicht via windows-explorer gelöscht werden. Ich bin sicher dass es alternative methoden gibt, nur würde ich gerne wissen, warum selbst nach einem FindClose der Zugriff verweigert wird. Wichtig ist nur: FindFirst,FindNext,FindClose ==> RmDir () ==> E/A 32 Sollte der Quellcode trotzdem zur Problemlösung beitragen kann ich diesen natürlich auch hier reinstellen... |
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Hey.
Post mal sicherheitshalber den Quellcode... Sind vielleicht Dateiein im Ordner?! Hätte dir vielleicht ein Funktion, die ein Verzeichnis löscht. Habe ich im Easy Helper gefunden (von mir ungetestet!): Zitat:
|
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Erstmal danke für den Tip.
Das Löschen an sich ist allerdings nicht das Problem. Das eigentliche Problem ist, dass die Suchmethode den Zugriff auf die Daten behält, also auch auf die leeren Ordner und das trotz FindClose und darüber hinaus auch bis zum Ende der Programmlaufzeit. Da muss erst der Zugriff aufgehoben werden ehe damit weitergearbeitet werden kann. |
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Hallo Hazardos!
Versuche es doch einfach mal mit einem
Delphi-Quellcode:
nach dem FindClose. Vielleicht setzt FindFirst ja das aktuelle Verzeichnis - oder Du hast das selber (z.B. über einen Open/SaveDialog) gesetzt.
SetCurrentDir (ExtractFilePath (ParamStr (0)));
Du könntest ja auch mal eine Testanweisung einfügen, die Dir den Wert von "GetCurrentDir" z.B. in einer Messagebox ausgibt. Wenn das das zu löschende Verzeichnis ist, hast Du die Ursache gefunden. Gruß Dietmar Brüggendiek |
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Zitat:
Trotzdem: ich hab so das Gefühl, das hängt an was anderem... Zeig mal n bisschen mehr Code... mfg Chrisitain |
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Code:
hier der vereinfachte Code...
procedure tF_Backup.Entfernen (von,nach : String);
var Search : TSearchRec; begin von := IncludeTrailingBackslash(von); nach := IncludeTrailingBackslash(nach); if FindFirst(nach+'*.*', faAnyFile, Search) = 0 then repeat if (not fileexists (von + Search.Name)) and FileExists (nach + Search.Name) then deleteFile (nach + Search.Name); until FindNext (Search) <> 0; if FindFirst(nach+'*.*', fadirectory, Search) = 0 then repeat if ((search.Attr and fadirectory) = fadirectory) and (Search.name[1] <> '.') then Entfernen (von+Search.Name+'\',nach + Search.Name + '\'); until FindNext (Search) <> 0; Findclose (Search); if not DirectoryExists (von) then RmDir (nach); end; er vergleicht 2 ordner auf den selben inhalt und passt den einen dem anderen an, sprich löscht, was nicht im einen vorhanden ist. jetzt könnte man ja meinen, da die funktion rekursiv ist, dass die drüberliegende Funktion noch auf die Daten zugreift. Es funktioniert selbst dann nicht, wenn ich während der suche eine Liste erstelle und anschließend nach der suche diese liste durchgehe und jedes einzelne element lösche. Vor der Suche besteht kein Zugriff. Also kann es ja an nichts anderem liegen. Ich möchte allerdings nicht das ganze Programm neu starten müssen, nur damit ich wieder auf die daten zugreifen kann... merkwürdig ist auch, dass die Dateien gelöscht werden können... Ich habe getcurrentdir ausgeführt und das ergebnis "desktop" erhalten, welches in keinster Weise mit meinem Aufruf in Verbindung gebracht werden kann... |
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Hallo Hazardos,
ich habe es nicht geprüft, aber kann es sein, daß jedes (erfolgreiche) FindFirst ein FindClose benötigt? Du schließt beide FindFirst-Aufrufe durch ein gemeinsames FindClose ab. Gruß Hawkeye |
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
naja.. ist ja das selbe TSearchRec... aber ich probiers mal aus!
|
Re: RmDir () liefert E/A-Fehler 32 nach findfirst-methode
Hey genau DAS war der Fehler... !!!!!!
Ein herzliches Dankeschön an alle die sich mit meinem Problem befasst und mir somit weitergeholfen haben! MfG Jörn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz