Hallo,
ich habe ein Problem mit CopyFileEx und CopyFileProgress festgestellt, welches ich nicht lösen kann.
Delphi-Quellcode:
var
test: Byte; // zu Beginn auf 0 gestezt
function CopyFileProgress(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason, hSourceFile, hDestinationFile, lpData: DWORD): DWORD; stdcall;
begin
Application.ProcessMessages;
if Main.bCopyCanceled = True then
begin
Result := PROGRESS_CANCEL;
Exit;
end;
case dwCallbackReason of
CALLBACK_CHUNK_FINISHED:
begin
Progress.PBrCopy.Position := TotalBytesTransferred.QuadPart;
Result := PROGRESS_CONTINUE;
end;
CALLBACK_STREAM_SWITCH:
begin
inc(main.test);
Main.Caption := inttostr(main.test);
//Progress.PBrCopy.Max := Trunc(0.3 + Progress.PBrCopy.Max * 100 / Main.FullSize);
Progress.PBrCopyAll.Position := Progress.PBrCopyAll.Position + Progress.PBrCopy.Max;
Progress.PBrCopy.Max := TotalFileSize.QuadPart;
Result := PROGRESS_CONTINUE;
end;
end;
end;
Es scheint alles normal zu laufen, bis mir auf fiel, dass die Prozente einfach nicht passen. Zunächst dachte ich es liegt an schlechte Rundungen aber durch die Variable test ist mir aufgefallen, dass nicht dass passiert was soll. Ich habe 50 Dateien ausgewählt, die kopiert werden sollten. Diese 50 Dateien wurden auch sauber kopiert aber test sagt was anderes: 57. Deshalb stimmen auch die Prozente nicht. Der Fortschrittsbalken ist immer schon am Ende obwohl noch Daten kopiert werden.
Wo liegt hier der Fehler?
Gruß
Mazel