Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
1.457 Beiträge
 
#29

AW: Dateien performant mit Callback kopieren

  Alt 3. Aug 2018, 13:57
Zitat:
Ähm... vieles. Und die Sektorengröße kann man schließlich einfach ermitteln. Einfach mal in der DP suchen.
Finde dazu genau nichts.

Könnt ihr mir vielleicht ein Beispiel zeigen was ihr mit Hausmitteln meint? Damit meine ich kein simples CopyFile.
Sondern irgendwas mit einem CallBack, sodass ich immer auf dem Laufenden bin und den Kopiervorgang auch von Außen abbrechen kann.

Aktuell nutze ich alte Windowsmittel, die viele verfluchen. Ich sag nur Block-Methoden.
Da ich hier aber eine Schleife habe, kann ich wann immer ich möchte abbrechen.

Edit
mein Problem mit dem CopyFileEx-Callback ist, dass ich nicht weiß wie ich die kopierten Bytes hochzählen kann.
TInterlocked.Add(OverallBytesCopied, ....); // TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred ? Bei einer Datei könnte ich OverallBytesCopied := TotalBytesTransferred; schreiben. Aber bei mehreren geht das nicht denke ich.

Delphi-Quellcode:
procedure CopyCallBackTEST(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: Int64; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle); stdcall;
begin
 if dwCallbackReason = CALLBACK_CHUNK_FINISHED then
  begin
   if not CancelCopy then
    begin
     TInterlocked.Add(OverallBytesCopied, ...);
    end;
  end;
end;

Result := CopyFileEx(PChar(Source), PChar(Dest), @CopyCallBackTEST, nil, @CancelCopy, 0);

Geändert von DieDolly ( 3. Aug 2018 um 14:12 Uhr)
  Mit Zitat antworten Zitat