AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Dateioperationen mit SHFileOperation
Thema durchsuchen
Ansicht
Themen-Optionen

Dateioperationen mit SHFileOperation

Ein Thema von sakura · begonnen am 7. Nov 2002 · letzter Beitrag vom 9. Sep 2003
Antwort Antwort
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
Benutzerbild von sakura
sakura

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

Re: Dateioperationen mit SHFileOperation

  Alt 9. Sep 2003, 13:10
Da obige Methode oft für Verwirrung sorgt, hier eine weitere Funktion, welche nicht auf StringListen, sondern auf einfachen Strings basiert. QuellDateiname (oder Verzeichnis ohne abschließenden Backslash) auf aFrom übergeben. Wenn nicht gelöscht wird, dann das Ziel an aTo übergeben, Operation (z.B. FO_MOVE) an aOperation übergeben und ab!

Delphi-Quellcode:
function DoFileWork(aOperation: FILEOP_FLAGS; aFrom, aTo: AnsiString;
    Flags: FILEOP_FLAGS): Integer;
var
  FromPath, ToPath: AnsiString;
  SHFileOpStruct: TSHFileOpStruct;
begin
  FromPath := aFrom + #0#0;
  ToPath := aTo + #0#0;
  with SHFileOpStruct do
  begin
    Wnd := 0;
    wFunc := aOperation;
    pFrom := PAnsiChar(FromPath);
    if ToPath <> 'then
    begin
      pTo := PAnsiChar(ToPath)
    end else begin // target available
      pTo := nil;
    end; // target not available
    fFlags := Flags;
  end; // structure
  Result := SHFileOperationA(SHFileOpStruct);
end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  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 02:55 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