DeleteDirectory buggy?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

DeleteDirectory buggy?

Beitrag 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!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Beitrag 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 ...
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Beitrag 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 :D

Oder gibt es eine Möglichkeit den Zugriff durch ExamineDirectory() explizit zu schließen?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Team100
Beiträge: 104
Registriert: 13.09.2004 22:59

Beitrag 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
Kompliziert kann es jeder lösen, aber das wirklich Geniale ist einfach.....
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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...
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag 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?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

also gibt es keinen weg verzeichnisse zu löschen( mit purebasic)?????
Antworten