Autor |
Beitrag |
schitho
      
Beiträge: 288
XP Home SP2
D2005 Prof
|
Verfasst: So 05.03.06 23:07
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
_________________ (Sorry! Leider ewiger Delphi-Neuling)
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Mo 06.03.06 14:55
Ist bei rmdirdas selbe Problem? Was meint in diesem Fall IOResult?
|
|
schitho 
      
Beiträge: 288
XP Home SP2
D2005 Prof
|
Verfasst: 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
_________________ (Sorry! Leider ewiger Delphi-Neuling)
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 07.03.06 08:43
Vermutlich ist das Betriebssystem noch nicht mit Umbenennen fertig, wenn du es löschen willst.
|
|
schitho 
      
Beiträge: 288
XP Home SP2
D2005 Prof
|
Verfasst: 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
_________________ (Sorry! Leider ewiger Delphi-Neuling)
|
|
drstar
      
Beiträge: 79
Erhaltene Danke: 2
Windows 8.1/x64
Delphi 10.1
|
Verfasst: So 19.03.06 11:27
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: 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
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
schitho 
      
Beiträge: 288
XP Home SP2
D2005 Prof
|
Verfasst: So 19.03.06 21:57
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
_________________ (Sorry! Leider ewiger Delphi-Neuling)
|
|
|