Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Hat das Kopieren de Verzeichnisses geklappt? (https://www.delphipraxis.net/91593-hat-das-kopieren-de-verzeichnisses-geklappt.html)

calculon 7. Mai 2007 14:39


Hat das Kopieren de Verzeichnisses geklappt?
 
Hi Leute,

ich kopiere mit den gängigen Funktionen (ShellAPI) ein Verzeichnis. Wenn nun während des Kopiervorganges auf "Abbrechen" geklickt wird und ich überprüfen will, ob der Kopiervorgang erfolgreich war, kann ich ich ja nicht einfach if DirectoryExists .. benutzen, da ein Teil ja kopiert wurde und die Funktion TRUE zurückgeben würde.

Wie kann ich denn überprüfen, ob ein Verzeichnis komplett kopiert wurde?

Gruß

Caluclon
--

himitsu 7. Mai 2007 14:48

Re: Hat das Kopieren de Verzeichnisses geklappt?
 
Die "gängigen" Funktionen geben ihrerseits auch Werte zurück, welche über den Bearbeitungsstatus berichten.

Hast diese mal geprüft.


Davon abgesehn, was ist bei dir gängig (z.B. wie sieht deine Kopierfunktion aus).



Wenn du ganz sichergehn willst, dann bleibt dir nur der Vergleich,
also Dateien auflisten und nachsehn, ob diese auch in der Kopie vorhanden sind.
Und eventuell noch den Dateiinhalt prüfen, denn die Datei könnte ja da sein, aber deren Inhalt muß ja deßhalbt nicht auch gleich stimmen.

calculon 7. Mai 2007 14:52

Re: Hat das Kopieren de Verzeichnisses geklappt?
 
Ich benutze:

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;

{  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. }
Zitat:

Zitat von himitsu
Die "gängigen" Funktionen geben ihrerseits auch Werte zurück, welche über den Bearbeitungsstatus berichten.

Wie kann ich die denn abfragen? Ich benutze die Fkt. folgendermaßen:

Delphi-Quellcode:
DoFileWork(FO_COPY, edit1.Text, edit2.Text, FOF_AllowUndo or FOF_NoConfirmation or FOF_NOERRORUI);
Gruß

Calculon
--

himitsu 7. Mai 2007 15:03

Re: Hat das Kopieren de Verzeichnisses geklappt?
 
Delphi-Quellcode:
Result := SHFileOperationA...
DoFileWork liefert einen Fehlercode als Integer ;)

> MSDN-Library durchsuchenSHFileOperation

also
Delphi-Quellcode:
If DoFileWork(FO_COPY, edit1.Text, edit2.Text, FOF_AllowUndo
  or FOF_NoConfirmation or FOF_NOERRORUI) <> S_OK Then FEHLER('°_°');
S_OK = 0
und
Zitat:

Zitat von MSDN
Return Value

Returns zero if successful, or nonzero otherwise.


calculon 7. Mai 2007 15:13

Re: Hat das Kopieren de Verzeichnisses geklappt?
 
Vielen Dank für deine Hilfe!

Gruß

Calculon
--


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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