Einzelnen Beitrag anzeigen

terence14
(Gast)

n/a Beiträge
 
#10

AW: Durch SHFileOperation gelöschte Ordner bleiben bis Programmende bestehen

  Alt 4. Feb 2013, 16:42
[QUOTE=Y.Elm;1200463]
...
Delphi-Quellcode:
...
function DeleteDirectory(DirName : string): Boolean;
var
  SHFileOpStruct : TSHFileOpStruct;
  DirBuf : array [0..255] of char;
  res: Integer;
begin
  try
   Fillchar(SHFileOpStruct,Sizeof(SHFileOpStruct),0) ;
   FillChar(DirBuf, Sizeof(DirBuf), 0);
   StrPCopy(DirBuf, DirName);
   with SHFileOpStruct do begin
    Wnd := 0;
    pFrom := @DirBuf;
    pTo := nil;
    wFunc := FO_DELETE;
    fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
   end;
    res := SHFileOperation(SHFileOpStruct); // res enthält immer 0, also kein Fehler
    Result := (res = 0) ;
   except
    Result := False;
  end;
end;
QUOTE]

Hallo, schau mal den folgenden Code an und ersetze
die Unterschiede zu Deinem Code.

Delphi-Quellcode:
uses ShellAPI;

function DeleteFiles(const AFile: string): boolean;
var
  sh: SHFileOpStruct;
begin
  ZeroMemory(@sh, SizeOf(sh));
  with sh do
  begin
    Wnd := Application.Handle;
    wFunc := FO_DELETE;
    pFrom := PChar(AFile +#0);
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
  end;
  result := SHFileOperation(sh) = 0;
end;

Beispielaufruf:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DeleteFiles('c:\test.txt') then //um eine Datei zu löschen
    ...
  if DeleteFiles('c:\test') then //um ein Verzeichnis zu löschen
    ...
  if DeleteFiles('c:\test\*.*') then // Um alle Dateien eines Verzeichnisses zu löschen
    ...
end;

Statt 'c:\test\*.*' kann z.B. auch 'c:\test\*.txt' übergeben werden, um alle Textdateien in einem Verzeichnis zu löschen.
MfG,
terence
  Mit Zitat antworten Zitat