AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateigröße als String ausgeben

Ein Thema von robinWie · begonnen am 28. Feb 2009 · letzter Beitrag vom 19. Feb 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von robinWie
robinWie

Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
 
Delphi 2005 Personal
 
#1

Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:03
Ich hab eine kleine Routine geschrieben mit der man sich die Dateigröße einer Datei als String ausgeben lasse kann. Die Dateigröße wird als Zahl so klein wie möglich ausgegeben und mit der entsprechenden Einheit versehen. Verwendet werden Binärpräfixe (Kibibyte, Mebibyte... (umrechnungfaktor 1024))

Beispiel
Dateigröße: 12288 Byte
Ausgabe: 1,5 MiB

Bei einem Fehler wird 'ERR' ausgegeben. Wenn die Datei nicht existiert wird 'FNE' ausgegeben.

Parameter:
FileName: dürfte klar sein^^
Digits: Anzahl der Nachkommastellen bei der Ausgabe

Delphi-Quellcode:
function GetFileSizeAsString(FileName: string; Digits: integer = 2): string;
var
F: File;
Size: Extended;
_Unit: integer;
S: string;
begin
if not FileExists(FileName) then
  begin
    Result := 'FNE';
    Exit;
  end;

try
  AssignFile(F, FileName);
  Reset(F);
  _Unit := 0;

  Size := FileSize(F) / 8; // Size in KiB
  CloseFile(F);

  while (Size >= 1024) and (_Unit < 7 ) do
    begin
      Size := Size / 1024;
      Inc(_Unit);
    end;

  case _Unit of
    0: S := 'KiB'; // Size in Kibibyte
    1: S := 'MiB'; // Size in Mebibyte
    2: S := 'GiB'; // Size in Gibibyte
    3: S := 'TiB'; // Size in Tebibyte
    4: S := 'PiB'; // Size in Pebibyte
    5: S := 'EiB'; // Size in Exbibyte
    6: S := 'ZiB'; // Size in Zebibyte
    7: S := 'YiB'; // Size in Yobibyte
  end;

  Result := FloatToStrF(Size, ffFixed, 15, Digits) + ' ' + S;
except
  Result := 'ERR';
end;
end;
Robin W.
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:06
Da fehlt ein CloseFile, oder habe ich das übersehen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von robinWie
robinWie

Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:16
ne hase nich übersehen.. hab ich glatt vergessen
Robin W.
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:21
Hi,

Also der Code ist noch nicht so ganz ideal... Hab die Funktion mit ner ca. 450KB großen Datei aufgerufen und du kannst dir vorstellen was ich zurück bekommen habe...

"0,00 YiB"

Also ich will keine 450KB Datei in YiB ausgegeben haben

Edit: Ich würde sogar fast behaupten, dass deine Funktion bei allen (normalsterblichen) Dateien "0,00 YiB" ausgibt. Denn so groß ist keine Datei -.-

Edit2: War zu faul zum rechnen und habs aus Spaß mal bei einer 4GB Datei probiert (FAT32 kann imo nichtmal größere Dateien verwalten wenn ich mich richtig erinnere) und das Ergebnis ist selbst bei so einer riesigen Datei 0,00 YiB.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:25
Zitat:
Size := FileSize(F) / 8;
Sicher, dass das so stimmt? FileSize ist doch in Byte, oder irre ich mich?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von robinWie
robinWie

Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:25
Zitat von Neutral General:
Hi,

Also der Code ist noch nicht so ganz ideal... Hab die Funktion mit ner ca. 450KB großen Datei aufgerufen und du kannst dir vorstellen was ich zurück bekommen habe...

"0,00 YiB"

Also ich will keine 450KB Datei in YiB ausgegeben haben

Edit: Ich würde sogar fast behaupten, dass deine Funktion bei allen (normalsterblichen) Dateien "0,00 YiB" ausgibt. Denn so groß ist keine Datei -.-
joa hab mich vertan.. statt den or muss da ein and hin. Hab is mir beim blick drauf auch aufgefallen -.-

Zitat von DeddyH:
Size := FileSize(F) / 8;
Sicher, dass das so stimmt? FileSize ist doch in Byte, oder irre ich mich?
Ich hatte das erst anders aber dann war das Ergebniss der größe immer eine andere im im windows explorer. Hab dann ein bischen rumexperimentier und rausgefunden wenn ich FileSize durch 8 teile passt das mit den KiB. Ich denke also mal, dass FileSize die größe in Kilobit ausgibt. In der Delphihilfe hab ich nix genaues zu FileSize gefunden, nur dass mir das die Dateigröße ausgibt -.-
Robin W.
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:29
Hi,

Ok es geht schon besser. Aber bei meiner 4GB Datei spuckt er mir 0,00KiB aus
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von robinWie
robinWie

Registriert seit: 26. Okt 2005
Ort: Lippcity
404 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:35
Habs gerade getestet, bei mir funzt es aber...

So hab ichs bei mir aufgebaut:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  opendialog1.Execute;
  ShowMessage(GetFileSizeAsString(opendialog1.FileName));
end;
Robin W.
Ein Computer kann (fast) alles.... Man muss es ihm nur beibringen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:47
Ich hab das Ganze mal ein wenig erweitert:
Delphi-Quellcode:
function GetFileSizeAsString(FileName: string; Use1024: Boolean = true): string;
const Sizes1024: array[0..7] of string = ('KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB');
      Sizes1000: array[0..7] of string = ('KB','MB','GB','TB','PB','EB','ZB','YB');
var
  F: File of Byte; //um sicherzugehen
  Size: Extended;
  _Unit: integer;
  S: string;
  Divisor: Integer;
begin
  if not FileExists(FileName) then
    begin
      Result := 'FNE';
      Exit;
    end;

  if Use1024 then
    Divisor := 1024
  else
    Divisor := 1000;

  try
    AssignFile(F, FileName);
    FileMode := fmOpenRead; //damit auch schreibgeschützte Dateien geöffnet werden können
    Reset(F);
    _Unit := Low(Sizes1024);

    Size := FileSize(F) / Divisor; // Size in KiB or KB
    CloseFile(F);

    while (Size >= Divisor) and (_Unit < High(Sizes1024)) do
      begin
        Size := Size / Divisor;
        Inc(_Unit);
      end;

    if Use1024 then
      S := Sizes1024[_Unit]
    else
      S := Sizes1000[_Unit];

    Result := Format('%.2f %s',[Size,S]);
  except
    Result := 'ERR';
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Dateigröße als String ausgeben

  Alt 28. Feb 2009, 13:56
Warum werden hier die veralteten Pascal Routinen bemüht?

Delphi-Quellcode:
function GetFileSize(Filename: string): Int64;
var
  fFile : THandle;
  wfd : TWIN32FINDDATA;
begin
  result := -1;
  if not FileExists(Filename) then
    exit;
  fFile := FindFirstfile(pchar(Filename), wfd);
  if fFile = INVALID_HANDLE_VALUE then
    exit;
  result := (wfd.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wfd.nFileSizeLow;
  windows.FindClose(fFile);
end;
Oder man nutzt MSDN-Library durchsuchenGetFileSizeEx.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz