Autor Beitrag
Jocke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

XP
D6 Pers
BeitragVerfasst: Mo 27.08.07 14:08 
Hallo zusammen,

Ich hätte da mal ne Frage:
Ich möchte die Größe einer Datei ermitteln und zwar so :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);

var
   f: file of Byte;
   size: Longint;
  begin
  if OpenDialog1.Execute then
  begin
    AssignFile(f, OpenDialog1.FileName);
    Reset(f);
    try
      size := FileSize(f);
      Edit1.Text:=IntToStr(size);
    finally
      CloseFile(f);
    end;
  end;
end;

Hier bekomme ich aber dann die Fehlermeldung : [Fehler] Es gibt keine überladene Version von 'AssignFile', die man mit diesen Argumenten aufrufen kann

Wenn ich die Variable f: file of Byte in f: file ändere, läufts problemlos durch, allerdings bekomme ich nicht die Größe in Bytes.
Warum geht f: file of Byte nicht ?

_________________
mfg
Jocke
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 27.08.07 14:18 
Moin!

Nimm doch einfach einen TFileStream, wenn es VCL sein soll, ansonsten die API-Funktion GetFileSize() :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
TheUnknown
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 334



BeitragVerfasst: Di 28.08.07 08:01 
Die Funktion benutze ich! Ich hab noch D5 und die interne FileSize-Funktion kommt mit sehr großen Dateien nicht so zurecht - und alles andere, was ich mir so ergoogelte auch nicht. DIESE hier aber habe ich dann auf delphipraxis.net gefunden und die klappt echt 1A.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function GetFileSizeEx(const sFileName: String): Int64;
type
  TInt64 = packed record
    Low : Cardinal;
    High: Cardinal;
  end;
var lFindData: TWin32FindData;
    lHandle  : Cardinal;
    lGiveback: TInt64;
begin
  lHandle := FindFirstFile(PChar(sFileName), lFindData);
  if (lHandle <> INVALID_HANDLE_VALUE)
  then begin
    lGiveback.Low := lFindData.nFileSizeLow;
    lGiveback.High := lFindData.nFileSizeHigh;
    Windows.FindClose(lHandle);
    Result := Int64(lGiveback);
  end else
    Result := -1;
end;
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 28.08.07 11:33 
Das ganze klappt auch mit AssignFile und FileSize. Nur musst du auf jeden Fall den zweiten Parameter von Reset beachten!
In dem gibst du die Recordgröße an mit der die Datei gelesen werden soll. Im Normalfall, also wenn du nichts angibst ist diese 128. Was dazu führt das du nur ein 128-stel der wirklich Größe mit FileSize geliefert bekommst.
verwendest du hingegen
ausblenden Delphi-Quelltext
1:
  Reset(f,1);					

klappt es.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?