![]() |
Probleme beim Löschen eines Ordners
Hallo,
ich brauch dringenst eure Hilfe. Ich renn dauernd gegen die Wand :wall: :wall: :wall: Ich will mit "deleteDir" einen Ordner löschen. Das geht auch, aber nur wenn der Ordner nie einen Inhalt hatte. Wenn der Ordner zuvor einen Inhalt hatte (bei mir nur immer eine Datei - die ich vor dem Löschen des Ordners gelöscht hab), dann gibt mir deleteDir immer ein false zurück. Über FindFirst, FindNext hab ich mal diesen Ordner durchsuchen lassen und hab rausgefunden, dass folgende "Dateien" noch im Ordner vorhanden sind: ".", ".." und "thumbs.db". Wenn ich aber in den Windows-Explorer schau, dann sagt der dass der ordner leer ist (0 Elemente). Wie kann ich also diesen Ordner löschen? hier mal ein wenig Code (aus meinem Test-Programm):
Code:
Button1 ist enabled = false
procedure TForm1.Button1Click(Sender: TObject);
begin CheckBox1.Checked := RemoveDir(Edit1.Text); end; procedure TForm1.Button2Click(Sender: TObject); begin CheckBox2.Checked := deleteFile(Edit2.Text); Button1.Enabled := CheckBox2.Checked; end; procedure TForm1.Button3Click(Sender: TObject); var sr: TSearchRec; FileAttrs: Integer; begin FileAttrs := 0; FileAttrs := FileAttrs + faHidden; FileAttrs := FileAttrs + faSysFile; FileAttrs := FileAttrs + faVolumeID; FileAttrs := FileAttrs + faDirectory; FileAttrs := FileAttrs + faArchive; FileAttrs := FileAttrs + faAnyFile; If FindFirst(Edit1.Text + '\*.*', FileAttrs, sr) = 0 then begin repeat if (sr.Attr and FileAttrs) = sr.Attr then begin showmessage(sr.Name); showmessage(IntToStr(ord(deletefile(sr.Name)))); end; until FindNext(sr) <> 0; FindClose(sr); end; end; CheckBox1 und 2 dienen nur als anzeige ob true oder falsch ach ja, thumbs.db lässt sich nicht löschen (siehe repeat-schleife) mfg Helmi |
Re: Probleme beim Löschen eines Ordners
Hi Helmi,
lass dir mal im Windows Explorer auch versteckte Dateien anzeigen, dann siehst du auch die Thumbs.db. Versuch anschließend, diese manuell zu löschen und anschließend den Ordner von deinem Programm aus zu löschen. Greetz alcaeus |
Re: Probleme beim Löschen eines Ordners
hallo
ich hab mir im win-explorer auch die versteckten dateien anzeigen lassen und eigenartigerweise war thumbs.db auch nicht zum sehen |
Re: Probleme beim Löschen eines Ordners
Hi Helmi,
es könnte sein dass die Datei auch als Systemdatei eingestellt ist. Dies musst du auch in den Ordneroptionen einstellen. Bei mir wird die Datei jedenfalls angezeigt. Greetz alcaeus |
Re: Probleme beim Löschen eines Ordners
ich hab jetzt meinen fehler gefunden warum ich die thumbs.db nicht löschen konnte
hier der "verbesserte Code":
Code:
Jetzt ist zwar der Ordner bis auf "." und ".." leer, aber löschen kann ich ihn immer noch nicht
procedure TForm1.Button3Click(Sender: TObject);
var sr: TSearchRec; FileAttrs: Integer; begin FileAttrs := 0; FileAttrs := FileAttrs + faHidden; FileAttrs := FileAttrs + faSysFile; FileAttrs := FileAttrs + faVolumeID; FileAttrs := FileAttrs + faDirectory; FileAttrs := FileAttrs + faArchive; FileAttrs := FileAttrs + faAnyFile; If FindFirst(Edit1.Text + '\*.*', FileAttrs, sr) = 0 then begin repeat if (sr.Attr and FileAttrs) = sr.Attr then begin showmessage(sr.Name); showmessage(IntToStr(ord(deletefile(Edit1.Text + '\' + sr.Name)))); end; until FindNext(sr) <> 0; FindClose(sr); end; end; :wall: :wall: :wall: |
Re: Probleme beim Löschen eines Ordners
Das ist kein Wunder: . und .. sind virtuelle Ordner, die ins übergeordnete bzw. ins eigene Verzeichnis verweisen. Die zu löschen ist unmöglich, da sie nicht existieren.
|
Re: Probleme beim Löschen eines Ordners
na aber dann ist die procedure deleteDir vollkommen nutzlos wenn man einen leeren Ordner nie löschen kann wegen den "." und ".."
oder gibts ne ne möglichkeit? |
Re: Probleme beim Löschen eines Ordners
Wie gesagt, "." und ".." sind nur logische Links, wenn ausser denen im Verzeichnis nichts existiert, muss es löschbar sein.
|
Re: Probleme beim Löschen eines Ordners
leider nein - oder ich mach was falsch
|
Re: Probleme beim Löschen eines Ordners
Moin Helmi,
Angaben wie die Attribute sollte man nicht mit + verknüpfen sondern mit OR, also statt
Delphi-Quellcode:
solltest Du
FileAttrs := FileAttrs + faHidden;
FileAttrs := FileAttrs + faSysFile; // usw.
Delphi-Quellcode:
verwenden.
FileAttrs := FileAttrs or faHidden;
FileAttrs := FileAttrs or faSysFile; // usw. Wenn Du mal nach ![]() Um herauszubekommen warum Du den Ordner nicht löschen kannst, solltest Du Dir mal die Ursache anzeigen lassen. Nach dem fehlgeschlagenen Löschversuch einfach mal
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
|
Re: Probleme beim Löschen eines Ordners
Danke Christian Seehase :hello: :cheers: :cheers: :hello:
dein Tip hat geholfen :-D Ich hab meinen Button 3 wie folgt umgeändert und dann kann ich mit dem Button2 den order ohne probs ändern:
Code:
procedure TForm1.Button3Click(Sender: TObject);
var sr: TSearchRec; FileAttrs: Integer; begin FileAttrs := 0; FileAttrs := FileAttrs or faReadOnly; FileAttrs := FileAttrs or faHidden; FileAttrs := FileAttrs or faSysFile; FileAttrs := FileAttrs or faVolumeID; FileAttrs := FileAttrs or faDirectory; FileAttrs := FileAttrs or faArchive; FileAttrs := FileAttrs or faAnyFile; If FindFirst(Edit1.Text + '\*.*', FileAttrs, sr) = 0 then begin repeat if (sr.Attr and FileAttrs) = sr.Attr then begin showmessage(sr.Name); showmessage(IntToStr(ord(deletefile(Edit1.Text + '\' + sr.Name)))); end; until FindNext(sr) <> 0; FindClose(sr); end; end; |
Re: Probleme beim Löschen eines Ordners
Moin Helmi,
freut mich. :-D Ich möchte Dir aber empfehlen Dir auch den Beitrag zu Gemüte zu führen, warum das so geht, denn das Verknüpfen von Flags kommt an vielen Stellen vor. |
Re: Probleme beim Löschen eines Ordners
Okili Dokili :-)
werd ich bei Gelegenheit tun - zuerst muss ich an meiner function weitertippen :coder: mfg Helmi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 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