AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi filesize summieren und von byte nach Mb rechnen
Thema durchsuchen
Ansicht
Themen-Optionen

filesize summieren und von byte nach Mb rechnen

Ein Thema von sharkx · begonnen am 21. Nov 2003 · letzter Beitrag vom 22. Nov 2003
Antwort Antwort
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#1

filesize summieren und von byte nach Mb rechnen

  Alt 21. Nov 2003, 23:17
Hallöle ..

Ich weiß das..
8 Bit = 1 Byte
1024 byte = 1KB
1024KB = 1Mb
sind, aber nun habe ich heute im Netz gelesen, das man mit Delphi nicht mit diesen zahlen rechnen soll, sondern 1Kb = 1000Byte nehmen soll, warum auch immer?!


nun zu dem eigentlichen problem.

Delphi-Quellcode:

// Result = byte
function GetFileSize(FileName: String): Integer;
var
  SR: TSearchRec;

begin
  if FindFirst(Filename, faAnyFile, SR) = 0 then
    begin
      Result := SR.Size;
    end
  else
    begin
      Result := -1;
    end;
  FindClose(SR);
end;


// Complete Bar enthällt nicht die tatsächliche Grösse aller in der SFV File befindlichen dateien
Function Status(Wert: Integer; FileSize: Integer): String;
Var
  I: Integer;

Begin
  If Wert = sfvfile.count then
    Result := '[AA] - ( ' + IntToStr(sfvfile.count) + 'F ' + IntToStr(FileSize div 1024 div 1024) + 'M - COMPLETE ) - [AA]'
  else
    Begin
      Result := '[';
        for i := 0 to (((Wert * sfvfile.count) div 100) div 10)-1 do
          Result := Result + '#';
        for i := (((Wert * sfvfile.count) div 100) div 10)+1 to 10 do
          Result := Result + '-';
          Result := Result + '] - ' + IntToStr((Wert * sfvfile.count) div 100) + '% Complete - [AA]';
    end;
  OldStatus := Result;
End;


// und so zähle ich die filesize hoch ...
var
  FSize : Integer;
  dir : String; // enthällt den Pfad zur Datei
  filen : String; // der Dateinamen

begin
...

  FSize := FSize + GetFileSize(dir + filen);

end;

Als beispiel habe ich einen ordner mit Gesammtgrösse der Dateien von 4,6GB genommen. Als Ergebniss in dem Statusbalken bekomme ich aber 52MB raus.

Wo liegt das Problem bzw was hab ich da falsch gemacht?
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: filesize summieren und von byte nach Mb rechnen

  Alt 21. Nov 2003, 23:25
Ein Integer geht nur bis 2147483647 Byte = 2097152 KByte = 2048 MB = 2 GB

Deshalb würde ich Int64 verwenden, der geht bis 2^63 = 8589934592 GB = 8388608 TB.
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: filesize summieren und von byte nach Mb rechnen

  Alt 21. Nov 2003, 23:27
Oh Ok! Das habe ich überhaupt nicht beachtet *g*

Vielen dank
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: filesize summieren und von byte nach Mb rechnen

  Alt 21. Nov 2003, 23:40
Moin Sharkx,

Zitat von sharkx:
...sondern 1Kb = 1000Byte nehmen soll, warum auch immer?!
Wo hast Du denn das gelesen?
Der einzige Grund, den ich mir denken kann, liegt nicht in Delphi begründet, sondern darin, dass viele Hersteller bei GB nicht 1024^3 sondern 1000^3 rechnen (z.B. bei der Grössenangabe von DVD-R), so dass bei mancher Anwendung die 1000 Sinn macht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: filesize summieren und von byte nach Mb rechnen

  Alt 21. Nov 2003, 23:55
Ich weiß nicht mehr genau auf welcher Seite das war. Ich hatte nach meiner lösung des problems gegoogelt und stoß da auf eine GetFileSize funktion die den wert gleich umrechnet. Da stand dieses dabei. Aber schlag mich tot .. ich weiß die URL nicht mehr :/
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: filesize summieren und von byte nach Mb rechnen

  Alt 22. Nov 2003, 00:05
Hi,

wie rufst due denn
Function Status(Wert: Integer; FileSize: Integer): String; auf?
$2B or not $2B
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: filesize summieren und von byte nach Mb rechnen

  Alt 22. Nov 2003, 00:16
 ForceDirectories(dir + Status(FileOK, FSize)); Habs aber danke scp hinbekommen. Wenn der Wert über dem zulässigen Integer wert ist, kanns nich gut gehen ;)
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: filesize summieren und von byte nach Mb rechnen

  Alt 22. Nov 2003, 00:32
hab noch was anderes für dich:

Freigabe von SearchRec berichtigt (siehe Beispiel in der OH):
Delphi-Quellcode:
  Function GetFileSize(FileName: String): Integer;
    Var SR: TSearchRec;

    Begin
      If FindFirst(Filename, faAnyFile, SR) = 0 Then Begin
        Result := SR.Size;
{}      FindClose(SR);
      End Else Result := -1;
    End;
Ein bissl Codeoptinierung:
Delphi-Quellcode:
  Function Status(Wert: Integer; FileSize: Int64): String;
    Var I: Integer;

    Begin
      If Wert = sfvfile.count Then
{}      Result := '[AA] - ( ' + IntToStr(sfvfile.count) + 'F ' + IntToStr(FileSize shr 20) + 'M - COMPLETE ) - [AA]'
      Else Begin
        Result := '[';
{}      For I := 1 to ((Wert * sfvfile.count) div 1000) do
          Result := Result + '#';
{}      For I := ((Wert * sfvfile.count) div 1000) + 1 to 10 do
          Result := Result + '-';
{}      Result := Result + '] - ' + IntToStr((Wert * sfvfile.count) div 100) + '% Complete - [AA]';
      End;
      OldStatus := Result;
    End;
Delphi-Quellcode:
{10 Bit = 1024}
X div 1024 div 1024 = X shr 20 {arbeitet schneller}
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


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:12 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