2016-11-04 1 views
0

J'ai un projet delphi 7 nommé Tunnel simple et l'une des caractéristiques est de calculer le téléchargement totale ou télécharger au total à partir d'Internet réseauComment faire pour obtenir nombre total de téléchargement et Total téléchargement qui peut atteindre plus de 4 Go Calcul de codage Delphi 7

comme celui-ci PICT: Simple Tunnel - Rev8.3 utiliser la fonction:

function BytesToFriendlyString(Value : DWord) : string; 
const 
    OneKB = 1024; 
    OneMB = OneKB * 1024; 
    OneGB = OneMB * 1024; 
begin 
    if Value < OneKB then 
    Result := FormatFloat('#,##0.00 B',Value) 
    else 
    if Value < OneMB then 
     Result := FormatFloat('#,##0.00 KB', Value/OneKB) 
    else 
     if Value < OneGB then 
     Result := FormatFloat('#,##0.00 MB', Value/OneMB) 
    else 
     if Value > OneGB then 
     Result := FormatFloat('#,##0.00 GB', Value/OneGB) 
end; (*BytesToFriendlyString*) 

adn sur minuterie je place cette fonction

.......................... 
if (MagRasCon.ConnectState = RASCS_Connected) then 
    begin 
     MagRasPer.GetPerfStats ; 

     edtTotalUP.Text := BytesToFriendlyString (MagRasPer.PerfXmitCur [0]); 
     edtTotalDL.Text := BytesToFriendlyString (MagRasPer.PerfRecvCur [0]); 

fonctionner pour compter le téléchargement totale ou télécharger au total sur ce réseau internet ,, mais toujours arrêter compte au total de 4 Go même si elle compte 4.74GB sur Proxifier ..

Comment faire peut compter plus de 4 Go .. ??

Répondre

1

DWORD est un entier non signé de 32 bits. La valeur maximale est 2^32 ou 4GB. C'est le problème. Vous avez besoin d'un type de variable pouvant contenir des valeurs plus grandes. Utilisez Int64 un type 64 bits signé. Delphi moderne ont UInt64, non signé 64 bits, mais pas Delphi 7. Encore un Int64 signé répondra à vos besoins.

+0

okay merci ... je vais essayer de changer DWORD en Int64 maintenant .. j'espère qu'il peut compter plus de 4 Go .. – Zeph

+0

Vous n'avez pas besoin d'espérer. Cela va à 2^63. –

+0

Est-ce que MagRas ne devrait pas supporter int64 aussi pour que cela fonctionne? – kobik

-1

Votre fonction accepte un paramter DWORD, qui est un type défini dans Windows.pas comme

type 
    DWORD = Cardinal; 

Le type Cardinal est un nombre entier non signé de 32 bits, qui a une plage de 0 à 4294967295. Depuis la valeur élevée est 4GB, il n'y a aucun moyen de le faire compter plus haut que 4GB.

Si Delphi 7 prend en charge Int64 et que MagRasPer prend en charge INt64, vous pouvez l'utiliser pour dépasser 4 Go. Si l'un ou l'autre (ou les deux) ne le fait pas, vous ne pouvez pas le faire.

+0

Delphi 7 a signé Int64 –

+0

@DavidHeffernan: Merci. Je pensais m'en souvenir, mais je n'étais pas sûr. Je n'ai pas de copie installée nulle part pour vérifier. Je ne sais pas ce qu'est MagRasPer, donc je ne sais pas si elle supporte aussi Int64. (Je suppose que MagRasPer fait partie de TMagRas d'Angus Johnson, mais je ne sais pas avec certitude.) –