![]() |
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:
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?
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'); |
Re: Verzeichnisse löschen
Delphi-Quellcode:
Solltest du nicht so schreiben:
fos.Wnd := Application.Handle; //<<-- HINSTANCE
Delphi-Quellcode:
fos.Wnd := Form1.Handle; ///<<------ HWND
|
Re: Verzeichnisse löschen
Funktoniert leider auch nicht.
|
Re: Verzeichnisse löschen
Hallo luckystar85,
warum versuchst du es nicht mit ![]() 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 |
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.
|
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 |
Re: Verzeichnisse löschen
So sieht übrigens die Funktion aus, die ich in meinen Programmen zum Kopieren und Löschen verwende:
Code:
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.
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; |
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