Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

Dateioperationen mit SHFileOperation

  Alt 7. Nov 2002, 12:53
Hi DPler,

diesen Beitrag habe ich zum ersten Mal am 1.11.2000 bei Delphi3000.com veröffentlicht. Nach und nach werde ich verschiedene meiner Beiträge hier einbringen.

Die Prozedure DoFileWork, welche ich hier vorstelle, ermöglicht es Dateioperationen (kopieren, löschen, verschieben, ...) mit Hilfe der WinAPI Funktion SHFileOperation durchzuführen.

Der Syntax
Delphi-Quellcode:
function DoFileWork(
  aWnd: HWND; aOperation: UINT; aFrom, aTo: TStrings; aFlags: FILEOP_FLAGS
): Integer;
Ein BeispielDoFileWork(Self.Handle, FO_DELETE, strlFiles, nil, FOF_ALLOWUNDO); Dieser Aufruf verschiebt alle Dateien und Verzeichnisse, welche in der StringListe strlFiles stehen in den Windows-Papierkorb.

Parameter:
  • aWnd - Handle zum aufrufenden Fenster
  • aOperation - eine der folgenden Konstanten
    • FO_MOVE
    • FO_COPY
    • FO_DELETE
    • FO_RENAME (Wildcards können nicht genutzt werden!)
  • aFrom - Namen der Quellen (vollständige Pfadangaben !)
  • aTo - Namen der Ziele wenn nötig (nil für FO_DELETE)
  • aFlags - mögliche Flags zur Verarbeitung
    • FOF_ALLOWUNDO - Ermöglicht eine Umkehrung der letzten Operation
    • FOF_FILESONLY - Verzeichnisse ignorieren
    • FOF_MULTIDESTFILES - aTo hat einen Eintrag für jeden Eintrag in der aFrom Liste
    • FOF_NOCONFIRMATION - Der User muss keine Bestätigung zum Überschreiben, etc. geben
    • FOF_NOERRORUI - Fehlermeldugen unterdrücken
    • FOF_NORECURSION - Unterverzeichnisse ignorieren
    • FOF_RENAMEONCOLLISION - Datei umbenennen, wenn diese bereits im Zielverzeichnis existiert (Kopie 1 von ...)
    • FOF_SILENT - Fortschrittsanzeige unterdrücken.
Es existerien weitere Flags, welche in der Online Hilfe stehen.

Ergebnisse der Funktion:
  • 0 - erfolgreich
  • <> 0 - Windows Fehlercode


Hinweis: Die Unit ShellAPI muss in der Uses Klausel stehen!

Delphi-Quellcode:
function DoFileWork(
  aWnd: HWND; aOperation: UINT; aFrom, aTo: TStrings; aFlags: FILEOP_FLAGS
  ): Integer;
var
  I: Integer;
  FromPath, ToPath: string;
  SHFileOpStruct: TSHFileOpStruct;
begin
  FromPath := '';
  for I := 0 to aFrom.Count - 1 do
    FromPath := FromPath + aFrom.Strings[I] + #0;
  FromPath := FromPath + #0;

  if Assigned(aTo) then
  begin
    ToPath := '';
    for I := 0 to aTo.Count - 1 do
      ToPath := ToPath + aTo.Strings[I] + #0;
    ToPath := ToPath + #0;
    if aTo.Count > 0 then
      aFlags := aFlags or FOF_MULTIDESTFILES;
  end;

  with SHFileOpStruct do
  begin
    Wnd := aWnd;
    wFunc := aOperation;
    pFrom := PChar(FromPath);
    if Assigned(aTo) then
    begin
      pTo := PChar(ToPath)
    end else begin // target available
      pTo := nil;
    end; // target not available
    fFlags := aFlags;
  end; // structure
  Result := SHFileOperation(SHFileOpStruct);
end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat