![]() |
Anzeige lKBytesDone und lTotalSize falsch?
Guten Tag,
Ich habe ein kleines Problem mit der Anzeige von den Totalen- und Entpackten Bytes beim Entpacken von Rardateien. Das komische ist wenn die Entpackte Datei groesser wie 1 GB ist, wird die Anzeige falsch dargestellt. Wenn Sie kleiner ist klappt alles. Die Datei besteht aus mehreren Rar-Volumen. Kann mir da einer helfen bitte? Danke im voraus.
Delphi-Quellcode:
Gruss Lucius,
function Bytes2String(i: longint): string;
begin Bytes2String := FormatFloat('###,###,###', i div 1024); end; // Bytes2String ///////////////////////////////////////////////////////////////////////////////// function RarCallbackProc(msg: UINT; UserData, P1, P2: integer): integer; stdcall; var s: string; begin Result := 0; case msg of UCM_CHANGEVOLUME: if (P2 = RAR_VOL_ASK) then begin end; UCM_PROCESSDATA: begin if RARExtract then begin lKBytesDone := lKBytesDone + P2; // bytes written so far //frmUnrar.Refresh; // refresh misc status text Application.ProcessMessages; // Current file progress frmUnrar.pbCurrentFile.Position := frmUnrar.pbCurrentFile.Position + P2; frmUnrar.lblBytes.Caption := Bytes2String(lKBytesDone) + ' kb of ' + Bytes2String(RARHeaderData.UnpSize) + ' kb'; // Total progress lKBWritten := lKBWritten + (P2 div 1024); frmUnrar.pbTotalProgress.Position := lKBWritten; frmUnrar.lblTotalMB.Caption := Bytes2String(lKBWritten) + ' mb of ' + Bytes2String(lTotalSize) + ' mb'; frmUnrar.Label2.caption := IntToStr(lTotalSize); // Time elapsed RARElapsedTime := Time - RARStartTime; DecodeTime(RARElapsedTime, Hour, Min, Sec, MSec); if Min < 10 then s := '00:0' + IntToStr(Min) + ':' else s := '00:' + IntToStr(Min) + ':'; if Sec < 10 then s := s + '0'; s := s + IntToStr(Sec); if s <> frmUnrar.lblElapTime.Caption then frmUnrar.lblElapTime.Caption := s; // Estimated time left if lTotalSize > 0 then begin RARPctDone := (lKBWritten * 100) div lTotalSize; if RARPctDone = 0 then RARPctDone := 1; end else RARPctDone := 50; RARPctLeft := 100 - RARPctDone; if RARPctLeft > 0 then begin iRARDoneTime := (Min * 60) + Sec; iRAREsti := ((iRARDoneTime * 100) div RARPctDone) - iRARDoneTime; Min := iRAREsti div 60; Sec := IRAResti - (60 * Min); if Min < 10 then s := '00:0' + IntToStr(Min) + ':' else s := '00:' + IntToStr(Min) + ':'; if Sec < 10 then s := s + '0'; s := s + IntToStr(Sec); if s <> frmUnrar.lblEstiTime.Caption then frmUnrar.lblEstiTime.Caption := s; end; //frmUnrar.Refresh; // refresh misc status text Application.ProcessMessages; Result := 1; end else Result := 1; end; end; end; // RarCallbackProc |
Re: Anzeige lKBytesDone und lTotalSize falsch?
Wes Grundes benutzt du vorzeichenbehaftete Integer? Erwartest du negative Groessen in der Naehe von schwarzen Loechern oder so?
Schau mal hier rein: ![]() Ich weiss als RAR-Benutzer, dass dort Dateigroessen von mehr als 4GB unterstuetzt werden, so dass ich mich mal aus dem Fenster lehne und anzuzweifeln wage, dass dort ueberhaupt ein 32bit-Wert stehen soll. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz