Seite 1 von 2
DeleteDirectory buggy?
Verfasst: 22.07.2005 14:37
von shadow
Hallo,
ich lösche ein Verzeichnis mit Unterverzeichnissen mit folgendem Befehl:
Code: Alles auswählen
DeleteDirectory("C:\test\testdir", "", #PB_FileSystem_Recursive | #PB_FileSystem_Force)
Das Problem ist, dass zwar der gesamte Inhalt des Verzeichnisses "testdir" gelöscht wird, aber trotzdem ein Fehler zurückgegeben wird, da das Hauptverzeichnis "testdir" nicht mitgelöscht wird.
Gut, muss zugeben, dass mir der API-Funktion RemoveDirectory(...) das Hauptverzeichnis "testdir" auch nicht gelöscht wird.
Kann mir jemand sagen woran das liegen könnte? Mache ich etwas falsch?
THX!
Verfasst: 22.07.2005 14:51
von ts-soft
Bei mir wird tesdir ganz normal gelöscht. Entweder befindet sich das löschende Programm auch in testdir oder es läuft noch ein anderer Process der in testdir liegt. Das kann dann natürlich nicht gehen. Eine geöffnete Textdatei die in testdir liegt kann auch reichen auch um ein löschen zu verhindern
Verfasst: 22.07.2005 15:12
von shadow
Das ist ja das merkwürdige daran: Alle Dateien werden normal gelöscht und zu dem Zeitpunkt besteht kein externer Zugriff auf die Daten.
Oder moment mal, ich prüf das genauer nach ...
Verfasst: 22.07.2005 16:14
von shadow
Jetzt hab ich's: Ich prüfe zuerst mit ExamineDirectory() ab, ob das Verzeichnis überhaupt existiert. Dann versuche ich erst zu löschen. Wie es scheint schließt ExamineDirectory den Zugriff auf das Verzeichnis nicht. Denn jetzt hab ich über die API mit FindFirstFile() und FindClose() die selbe Vorgehensweise nachgebildet und es geht
Oder gibt es eine Möglichkeit den Zugriff durch ExamineDirectory() explizit zu schließen?
Verfasst: 22.07.2005 17:02
von ts-soft
>> Oder gibt es eine Möglichkeit den Zugriff durch ExamineDirectory() explizit zu schließen?
Hab ich leider auch nichts entdecken können, aber führe die Funktion einfach noch mal aus, auf ein anderes Verzeichnis also Dummy (ungetestet). Wäre vielleicht sinnvol eine entsprechende Funktion in PB einzubauen, um die Bezüge auf das Verzeichnis lösen zu können.
Verfasst: 22.07.2005 17:18
von Team100
Der Ansatz von ts-soft ist korrekt.
Ich *schließe* das ExamineDirectory(...) mit bestem Erfolg immer so:
Code: Alles auswählen
If CreateDirectory("c:\xyx\")
ExamineDirectory(100, "c:\xyx\", "*.*")
Debug DeleteDirectory("c:\xyx\", "*.*") ; wird nicht gelöscht
Debug ExamineDirectory(100, "?", "*.*") ; Dummydirectory
Debug DeleteDirectory("c:\xyx\", "*.*") ; wird gelöscht
Endif
Sollte wirklich mal ein vernünftiger Befehl her....
Cu von Team100
Verfasst: 22.07.2005 23:53
von Andre
Team100 hat geschrieben:Sollte wirklich mal ein vernünftiger Befehl her....
Ich habe Fred zumindest mal den Sachverhalt geschildert, mal sehen was er meint...
Verfasst: 27.04.2006 19:00
von Joel
Ich hab den Befehl von Team100 eingegeben. Aber es wird angezeigt:
DeleteDirectory() is not a function, an array, or a linked list.
Woran liegt dass?
Verfasst: 27.04.2006 19:42
von AND51
Team100 hat geschrieben:Code: Alles auswählen
ExamineDirectory(100, "c:\xyx", "*.*")
Debug DeleteDirectory("c:\xyx", "*.*") ; wird nicht gelöscht
Debug ExamineDirectory(100, "?", "*.*") ; Dummydirectory
Debug DeleteDirectory("c:\xyx", "*.*") ; wird gelöscht
Das Verzeichnis wird nicht geloescht, weil der Fokus von Examine Directorz noch darauf liegt. Ich hoffe, ihr versteht, was ich meine. Meine Vermutung ist die folgende: Mann kann ja auch keine Datei loeschen, die in Benutzung ist, so kann auch hier kein Verzeichnis geloescht weren, dass mit ExamineDirectory in benutzung ist. Diese "Benutzung" wird dadurch aufgehoben, dass Team100 hier ein 2. mal ExamineDirectorz auf ein anderes Verzeichnis anwendet.
Verfasst: 28.04.2006 14:29
von Joel
also gibt es keinen weg verzeichnisse zu löschen( mit purebasic)?????