Entwickler-Ecke

Dateizugriff - Byte -> KB -> MB usw. Umrechnen


MaRiO - Di 11.11.03 12:02
Titel: Byte -> KB -> MB usw. Umrechnen
Hallo @all.

Ich stelle mich gerade blöd an, komme aber nicht auf die Lösung wie Ich den Wert aus dieser Funktion :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function GetDiskSize(drive: Char; var free_size, total_size: Int64): Boolean; 
var 
  RootPath: array[0..4of Char; 
  RootPtr: PChar; 
  current_dir: string
begin 
  RootPath[0] := Drive;
  RootPath[1] := ':'
  RootPath[2] := '\'
  RootPath[3] := #0
  RootPtr := RootPath; 
  current_dir := GetCurrentDir; 
  if SetCurrentDir(drive + ':\'then 
  begin 
    GetDiskFreeSpaceEx(RootPtr, Free_size, Total_size, nil); 
    // this to turn back to original dir 
    SetCurrentDir(current_dir); 
    Result := True; 
  end 
  else 
  begin 
    Result := False; 
    Free_size  := -1
    Total_size := -1
  end
end;

Z.b. Als Mega Byte, Kilobyte usw. ausgeben kann. Bei mir steht in der Variable Groesse z.b. 352663774

Ich möchte diesen Wert gerne Umrechnen. Kann mir gerade jemand Helfen ?

Mfg
Mario

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Delete - Di 11.11.03 12:15

Wie viel Byte hat denn ein Kilobyte und wie viel Kilobyte hat ein Megabyte? :roll:


MaRiO - Di 11.11.03 12:40

Ist mir schon klar :

1 KB = 1024 Byte.
1 MB = 1024 KB.

Habe meine Frage vieleicht nicht richtig gestellt.
Ich möchte gerne einen Rückgabewert in einem String der mir das KB,MB,GB oder Byte hinten dran packt.

Verstehst du was Ich meine ?

MFG
Mario


MaRiO - Di 11.11.03 12:45

Ich poste dir mal meinen Quelltext, ist aber warscheinlich Unsinnig und Falsch.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
GetDiskSize('G', free_size, total_size);
 differenz :=total_size - free_size;

 dif :=FloatToStr(differenz / 1048576);

 IF Length(dif) > 12 Then Dif := dif + ' TB';
 IF Length(dif) = 8 Then Dif := dif + ' GB';
 IF Length(dif) = 5 Then Dif := Dif + ' MB';
 IF Length(dif) < 5 Then Dif := Dif + ' KB';

 frei :=FloatToStr(free_size div 1024);
 IF Length(frei) >= 12 Then Begin
  frei :=FloatToStr(free_size / sqr(1024));
  frei := frei + ' TB';
 End Else Begin
 IF (Length(frei) <= 12and (Length(frei) > 7Then Begin
  frei :=FloatToStr(free_size / sqr(1024));
  frei := frei + ' GB';
 End Else Begin
 IF (Length(frei) <= 8and (Length(frei) >5Then Begin
  frei :=FloatToStr(free_size / sqr(1024));
  frei := frei + ' MB';
 End Else Begin
 IF (Length(frei) <= 5)  Then Begin
  frei :=FloatToStr(free_size div 1024);
  frei := frei + ' KB';
  End Else Begin
 IF Length(frei) <= 5 Then groesselwg :='Speicher kleiner 1 MB';
   fehler :=groesselwg;
   End;    //IF
  End;  // IF
 End// IF
 ShowMessage(frei);
End// Freier Speicher


Moderiert von user profile iconTino: Quote- durch Delphi-Tags ersetzt.


Delete - Di 11.11.03 13:28

Wie wäre es hiermit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function FormatDiskSpace(DiskSpace: Int64): string
begin 
  case DiskSpace of 
    0..1023: result := Format('%d byte', [DiskSpace]); 
    1024..1048576: result := Format('%2n KB', [DiskSpace / 1024]); 
    1048577..1073741824: result := Format('%2n MB', [DiskSpace / 1024 / 1024]); 
  else 
    result := Format('%2n GB', [DiskSpace / 1024 / 1024 / 1024]); 
  end
end;


smiegel - Di 11.11.03 13:49

Hallo,

oder so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
const
  iKByte=1024;
  iMByte=1024*iKByte;
  iGByte=1024*iMByte;

type
  TByteFormat(bf_Byte, bf_KByte, bf_MByte, bf_GByte); 

function FormatByte(const aSize:Extended; aFmt:TByteFormat):String;
begin
  case aFmt of
    bf_Byte :Result:=FormatFloat(aSize, '#,#0 Byte');
    bf_KByte:Result:=FormatFloat(aSize/iKByte, '#,#0.00 KB');
    bf_MByte:Result:=FormatFloat(aSize/iMByte, '#,#0.00 MB');
    bf_GByte:Result:=FormatFloat(aSize/iGByte, '#,#0.00 GB');
    else Result:=FormatFloat(aSize, '#,#0 Byte');
  end// case
end// FormatByte

...
...
Label1.Caption:='Frei: '+FormatByte(free_size, bf_MGyte); // in Giga
Label2.Caption:='Belegt: '+FormatByte(total_size-free_size, bf_MByte); // in Mega
...


MaRiO - Di 11.11.03 14:38

Super gemacht ! Danke an alle Beteiligten. :D

Werde mal versuchen zu verstehen. :wink:

Mfg
Mario