Entwickler-Ecke
Dateizugriff - RemoveDir löscht nicht immer ein leeres Verzeichnis
schitho - So 05.03.06 23:07
Titel: RemoveDir löscht nicht immer ein leeres Verzeichnis
Hi,
RemoveDir sollte ja ein leeres Verzeichnis löschen. Tut es aber scheinbar nicht immer.
Ich meinem Programm durchsuche ich ein Verzeichnis, überschreiben alle Dateien, benenne die um und zum Schluß lösche ich diese Dateien. Danach wird das nun leere Verzeichnis umbenannt und mit RemoveDir gelöscht:
Delphi-Quelltext
1: 2: 3:
| AssignFile(f,szPath); Rename(f,newDirName); Result:=RemoveDir(newDirName); |
Das Löschen des Verzeichnisses scheitert aber immer wieder, aber nicht immer. Nur wenn ich ein Sleep dazwischen gebe funktioniert es:
Delphi-Quelltext
1: 2: 3: 4:
| AssignFile(f,szPath); Rename(f,newDirName); sleep(10); Result:=RemoveDir(newDirName); |
Scheinbar braucht Windows etwas Zeit, um festzstellen, dass das Verzeichnis schon leer ist. Oder kann es an etwas anderem liegen?
Gibt es eine Möglichkeit, wie ist das Problem eleganter (als mit Sleep) umgehe?
Danke
Gruß
Thomas
digi_c - Mo 06.03.06 14:55
Ist bei rmdirdas selbe Problem? Was meint in diesem Fall IOResult?
schitho - Di 07.03.06 00:23
digi_c hat folgendes geschrieben: |
Ist bei rmdirdas selbe Problem? Was meint in diesem Fall IOResult? |
Der gleiche Fehler. IOResult liefert den Fehlercode 32 (=Verletzung bei der gemeinsamen Benutzung).
Wobei der Fehler nicht immer auftritt.
Wenn ich wieder Sleep dazwischen gebe, dann funktioniert es. Dabei genügt scheinbar bereit ein Sleep(1) :?!?:
Seltsam.
Wie kann ich das Problem lösen?
Gruß
Thomas
jasocul - Di 07.03.06 08:43
Vermutlich ist das Betriebssystem noch nicht mit Umbenennen fertig, wenn du es löschen willst.
schitho - Di 07.03.06 22:09
jasocul hat folgendes geschrieben: |
Vermutlich ist das Betriebssystem noch nicht mit Umbenennen fertig, wenn du es löschen willst. |
Das vermute ich auch! Ich werde wahrscheinlich ein Schleife einbauen, die eine bestimmte Zeit das Löschen probiert. Nur wenn es erst nach einiger Zeit nicht funktioniert, dann werde ich eine Fehlermeldung ausgeben.
Die Lösung mit Sleep erscheint mir doch recht unsicher, weil es wohl auch vom PC abhängen wird, wie schnell das Betriebssystem zum Löschen bereit ist.
Oder habt Ihr eine bessere Lösung?
Gruß
Thomas
drstar - So 19.03.06 11:27
Titel: Re: RemoveDir löscht nicht immer ein leeres Verzeichnis
schitho hat folgendes geschrieben: |
Hi,
...
Delphi-Quelltext 1: 2: 3:
| AssignFile(f,szPath); Rename(f,newDirName); Result:=RemoveDir(newDirName); |
... |
Nur mal ne Frage: Wo löschst Du die Datei? Ich seh nur, daß ne Datei umbenannt wird und ein (dann wohl nicht leeres) Verzeichnis gelöscht werden soll, und daß dürfte dann ein wenig schwierig werden. Ansonsten könnte es auch daran liegen, daß der Dateiname und der Ordnername gleich sind, und das hat schon mal unter Windows ME unlustiges ergeben, möglicherweise würde es also helfen, Datei- und Ordnernamen verschieden zu wählen.
MSCH - So 19.03.06 11:34
kipp ein Application.ProcessMessages dazwischen.
Windows ist doch nachrichtenbasierend. Die Shell also auch und wenn sie keine "Zeit" bekommt,
auf änderungen im Filesystem zu reagieren, kommt es zu gezeigten "Ungereimtheiten".
grez
msch
schitho - So 19.03.06 21:57
Titel: Re: RemoveDir löscht nicht immer ein leeres Verzeichnis
drstar hat folgendes geschrieben: |
schitho hat folgendes geschrieben: | Hi,
...
Delphi-Quelltext 1: 2: 3:
| AssignFile(f,szPath); Rename(f,newDirName); Result:=RemoveDir(newDirName); |
... |
Nur mal ne Frage: Wo löschst Du die Datei? Ich seh nur, daß ne Datei umbenannt wird und ein (dann wohl nicht leeres) Verzeichnis gelöscht werden soll, und daß dürfte dann ein wenig schwierig werden. Ansonsten könnte es auch daran liegen, daß der Dateiname und der Ordnername gleich sind, und das hat schon mal unter Windows ME unlustiges ergeben, möglicherweise würde es also helfen, Datei- und Ordnernamen verschieden zu wählen. |
Die Dateien lösche ich natürlich vorher. Das Verzeichnis ist also definitiv leer.
MSCH hat folgendes geschrieben: |
kipp ein Application.ProcessMessages dazwischen.
Windows ist doch nachrichtenbasierend. Die Shell also auch und wenn sie keine "Zeit" bekommt,
auf änderungen im Filesystem zu reagieren, kommt es zu gezeigten "Ungereimtheiten".
grez
msch
|
Danke für den Tipp! Das werde ich ausprobieren.
Gruß
Thomas
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!