![]() |
SHFileOperation, Ordner löschen
Hi @ all!
Ich hab ein Problem beim löschen eines Ordners. Wenn ich mit SHFileOperation einen Ordner löschen will, dann kommt der Fehler Der Ordner 'NAME' kann nicht entfernt werden: Eine Zugriffsverletzung ist aufgetreten! Die Quell- oder Zieldatei ist möglicherweise geöffnet! Da ich diesen Ordner nicht geöffnet habe weiss ich nicht was ich falsch mache??!! Der Quelltext schaut so aus:
Delphi-Quellcode:
for X := 0 to Liste.Count -1 do begin
if FileExists(Liste.Strings[x]) then begin with shellinfo do begin wnd := Application.Handle; wfunc := FO_DELETE; pFrom := PChar(Liste.Strings[x] + #0); pTo := nil; end; // End With SHFileOperation(shellinfo); end; // End If end; // End For |
Re: SHFileOperation, Ordner löschen
Hi Chester,
nicht du hast den Ordner geöffnet, sondern der Windows Explorer sperrt ihn - nachdem du mindestens eine Datei daraus gelöscht hast. Du verwendest übrigens gar keine Flags. Die Löschfunktionalität habe ich so gekapselt:
Delphi-Quellcode:
Bei dir wäre zu überlegen, ob du nicht alle Dateien mit einem Aufruf löschst. Schneller ist das.
// uses ShellApi;
function ShellDelete(const fsoName: string): Integer; var sh: SHFileOpStruct; iResult: Integer; begin ZeroMemory(@sh, sizeof(sh)); with sh do begin wFunc := fo_Delete; pFrom := PChar(fsoName + #0); fFlags := fof_Silent or fof_NoConfirmation or fof_NoErrorUI; end; Result := SHFileOperation(sh); end; Grüße vom marabu |
Re: SHFileOperation, Ordner löschen
So löschts die Dateien im Ordner, aber nicht den Ordner.
Die Dateien lösch ich schon vorher, weil ich einige zuerst verschieben. Wie soll ich das machen: Bei dir wäre zu überlegen, ob du nicht alle Dateien mit einem Aufruf löschst. Schneller ist das. |
Re: SHFileOperation, Ordner löschen
Wenn ich meiner Funktion den Namen eines Ordners übergebe, dann wird der gelöscht - mit allen enthaltenen Dateien und Unterordnern.
Wenn du zuerst Dateien in einem Ordner löschst oder verschiebst, dann sperrt der Explorer den Ordner - schon alleine wegen des in die Shell integrierten undo features. Verschiebe nicht, sondern kopiere die noch benötigten Dateien, dann sollte das Löschen des Ordners funktionieren. Mehrere Dateiobjekte kannst du mit einem einzigen Aufruf löschen, indem du mehrere PChar-Strings übergibst, anstelle nur einen. marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 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