Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verzeichnisse löschen (https://www.delphipraxis.net/40317-verzeichnisse-loeschen.html)

luckystar85 14. Feb 2005 10:52


Verzeichnisse löschen
 
Ich lege in meinen Programm ein temp.-Verzeichnis an. Das sollte sobald ich es nicht mehr brauche auch gelöscht werden. Das mache ich mit

Delphi-Quellcode:
function loesche_Verzeichnis(Verzeichnis : string): boolean;
var
  fos : TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  fos.Wnd    := Application.Handle;
  fos.wFunc  := FO_DELETE;
  fos.fFlags := FOF_NOERRORUI or FOF_SILENT or FOF_NOCONFIRMATION;
  fos.pFrom  := PChar(Verzeichnis+#0);
  Result     := SHFileOperation(fos) = 0;
end;

Aufruf:
if (not loesche_Verzeichnis(Verzeichnis_zippen.ExtrBaseDir)) then
    ShowMessage('Das Verzeichnis konnte nicht gelöscht werden');
Das Verzeichnis wird nicht gelöscht. Wenn ich mir mit GetLastError den Fehler hole kommt "Das Handle ist ungültig". Woran könnte das liegen?

sniper_w 14. Feb 2005 10:59

Re: Verzeichnisse löschen
 
Delphi-Quellcode:
fos.Wnd    := Application.Handle; //<<-- HINSTANCE
Solltest du nicht so schreiben:
Delphi-Quellcode:
fos.Wnd    := Form1.Handle; ///<<------ HWND

luckystar85 14. Feb 2005 12:03

Re: Verzeichnisse löschen
 
Funktoniert leider auch nicht.

alcaeus 14. Feb 2005 12:07

Re: Verzeichnisse löschen
 
Hallo luckystar85,

warum versuchst du es nicht mit MSDN-Library durchsuchenRemoveDirectory? Das Verzeichnis muss zwar leer sein, aber Dateien und Verzeichnisse rekursiv löschen dürfte wohl auch keine Schwierigkeit darstellen :zwinker:
Und so wie ich das gesehen habe, geht TSHFileOperation nicht für Verzeichnisse, sondern nur für Dateien. Ich kann mich da aber auch irren.

Greetz
alcaeus

MathiasSimmack 14. Feb 2005 12:15

Re: Verzeichnisse löschen
 
Tust du, alca. SHFileOperation ist die gleiche Methode, die auch der Explorer zum Löschen, Verschieben, Kopieren und Umbenennen benutzt. Und der kann ganze Ordner ausradieren. ;) Und im Gegensatz zu RemoveDir müssen die nicht leer sein.

alcaeus 14. Feb 2005 12:17

Re: Verzeichnisse löschen
 
Danke Mathias, wieder was gelernt. Die Hilfe zum Win32-SDK hat nämlich immer nur von "Files" gesprochen, nie aber von "Directories" ;)

Greetz
alcaeus

MathiasSimmack 14. Feb 2005 12:18

Re: Verzeichnisse löschen
 
So sieht übrigens die Funktion aus, die ich in meinen Programmen zum Kopieren und Löschen verwende:
Code:
function ShellCmd(const hwndParent: HWND; dwFunction: dword;
  dwFlags: dword; szFrom, szTo: string): integer;
var
  SHFileOp       : TSHFileOpStruct;
begin
  ZeroMemory(@SHFileOp,sizeof(SHFileOp));

  SHFileOp.Wnd   := hwndParent;
  SHFileOp.wFunc := dwFunction;
  SHFileOp.pFrom := pchar(szFrom + #0);
  SHFileOp.pTo   := pchar(szTo + #0);
  SHFileOp.fFlags := dwFlags;
  Result         := SHFileOperation(SHFileOp);
end;
Entweder hat Borland das als bool eingebunden, oder ich habe die Prüfung vergessen. Aber wie auch immer, ich habe keine Schwierigkeiten beim Löschen von Ordnern.

luckystar85 14. Feb 2005 12:20

Re: Verzeichnisse löschen
 
TSHFileOperation geht auch mit Verzeichnissen, es muss nur mit ExcludeTrailingBackslash der letzte Backslash entfernt werden. Danke für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 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