Einzelnen Beitrag anzeigen

Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

CopyFileProgress mit Fehler

  Alt 7. Jul 2007, 18:12
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
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat