Forum: Win32/Win64 API (native code)
by DieDolly,
4. Nov 2019
BytesCopied und BytesCopiedTmp sind global.
Ich glaube ich habs
// BytesCopied und BytesCopiedTmp sind global
function CopyCallback(TotalFileSize, TotalBytesCopied, StreamSize, StreamBytesTransferred: Int64; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle)
: DWORD; stdcall;
var
Forum: Win32/Win64 API (native code)
by DieDolly,
4. Nov 2019
Mach ich doch
if CanContinue then
begin
BytesCopiedTmp := BytesCopied - StreamBytesTransferred;
Inc(BytesCopied, BytesCopiedTmp);
Caption := BytesCopied.ToString + ' - ' + BytesCopiedTmp.ToString;
end;
Forum: Win32/Win64 API (native code)
by DieDolly,
4. Nov 2019
Fast. Sequentiell.
2 Dateien sollen kopiert werden. Die erste 1 GB, die zweite 2 GB.
Im CopyFileEx steht Caption := BytesCopied.ToString + ' - ' + BytesCopiedTmp.ToString;
Bei der ersten Datei sieht man in der Caption, wie BytesCopied bis 1 GB hochgeht. BytesCopiedTmp ist durchgehend 1 MB (der Chunk).
Wird angefangen die Zweite Datei zu kopieren, fängt BytesCopied wieder bei 0 an statt...
Forum: Win32/Win64 API (native code)
by DieDolly,
2. Nov 2019
Der Block-basierte Code funktioniert. Der ist aber eh von Windows abhängig und deswegen möchte ich gerne auf die Windowseigenen Mittel zurückgreifen denn ich denke das Memory-Managment ist da besser.
// Der einfachste Fall: stellt euch eine Stringliste vor wo 2 Pfade drin stehen. Diese Dateien sollen kopiert werden. Es sind jeweils mindestens 2 GB, damit man den Fortschritt auch sieht.
...
Forum: Win32/Win64 API (native code)
by DieDolly,
2. Nov 2019
Oben steht er doch.
Ich möchte immer die aktuelle Größe des gerade verarbeitetenden Chunks zu einer Variable hinzuaddieren, nicht die gesamte Größe die bis zu dem Zeitpunkt verarbeitet wurde.
Ich habe eine Variable in der steht, wieviele Bytes ingesamt kopiert werden müssen. Bei 2 Dateien mit je 1 GiB also *2.147.483.648.
In einer anderen Variable füge ich immer die Bytes hinzu, die der...
Forum: Win32/Win64 API (native code)
by DieDolly,
1. Nov 2019
Es ist eine Kopie von hier umgeschrieben zu 64bit https://stackoverflow.com/questions/438260/delphi-fast-file-copy
Ich nutze diese Funktion statt TFile.Copy weil ich der Meinung bin mehr Kontrolle zu haben.
Wie benutzt man TFile.Copy richtig, um auch auf Abbruchereignisse zu reagieren?
Ich habs mal so versucht aber das mit dem CallBack funktioniert nicht so richtig. Ich würde gerne auf die...
Forum: Win32/Win64 API (native code)
by DieDolly,
31. Okt 2019
Wenn der Fehler auftritt, dann bei allen Kombinationen von Datenträgern.
Hier in dem Fall aber von einer externen Festplatte zur anderen. Ich kopiere Dateien klassisch mit ReadFile und WriteFile blockweise. Der Fehler tritt sporadisch auf.