AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SHFileOperation, Ordner löschen
Thema durchsuchen
Ansicht
Themen-Optionen

SHFileOperation, Ordner löschen

Ein Thema von Chester · begonnen am 6. Feb 2006 · letzter Beitrag vom 6. Feb 2006
Antwort Antwort
Benutzerbild von Chester
Chester

Registriert seit: 16. Nov 2004
Ort: reutte
11 Beiträge
 
Delphi 7 Enterprise
 
#1

SHFileOperation, Ordner löschen

  Alt 6. Feb 2006, 09:50
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
Man muss immer auf den Grund tauchen um etwas zu erreichen und nicht an der Oberfläche dahin schwimmen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SHFileOperation, Ordner löschen

  Alt 6. Feb 2006, 11:07
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:
// 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;
Bei dir wäre zu überlegen, ob du nicht alle Dateien mit einem Aufruf löschst. Schneller ist das.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Chester
Chester

Registriert seit: 16. Nov 2004
Ort: reutte
11 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: SHFileOperation, Ordner löschen

  Alt 6. Feb 2006, 11:32
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.
Man muss immer auf den Grund tauchen um etwas zu erreichen und nicht an der Oberfläche dahin schwimmen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: SHFileOperation, Ordner löschen

  Alt 6. Feb 2006, 12:39
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz