Dateigröße von einer Textdatei ermitteln

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Dateigröße von einer Textdatei ermitteln

Beitrag von Hercules »

Hallo,
ich wollte wissen, ob eine Textdatei leer ist. Dazu habe ich mir zwei Variablen deklariert:

Code: Alles auswählen

FTXT: Textfile;
SIZE: Integer;

Mit den Befehlen

Code: Alles auswählen

AssignFile(FTXT, 'DATEI.TXT');
SIZE := FileSize(FTXT)
konnte ich mir in Delphi immer die Dateigröße nach SIZE holen. Mit Lazarus geht das nicht mehr.
Fehlermeldung:
Unit1.pas(812,22) Error: Call by var for arg no. 1 has to match exactly: Got "Text" expected "File"
Kann mir da jemand helfen ?
Gruß Hercules und noch einen schönen sonnigen Tag. :D
Zuletzt geändert von Lori am Sa 26. Mär 2011, 13:33, insgesamt 1-mal geändert.
Grund: Highlighter

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von indianer-frank »

Das funktioniert auch in Delphi nicht, da die Datei für Filesize geöffnet sein muß. Also mindestens so

Code: Alles auswählen

AssignFile(FTXT, 'DATEI.TXT');
reset(ftxt);
SIZE := FileSize(FTXT);

Dann erhälst Du allerdings die falsche Länge, da mit Recordgröße=128 gerechnet wird, und reset(ftxt,1) geht auch nicht. Wenn Du nur die Länge einer Datei haben will, mußt Du die Variable ja nicht als Text deklarieren. Dies läuft unter Delphi und FPC/Lazarus:

Code: Alles auswählen

var
FTXT: file;
SIZE: Integer;
begin
Assign(FTXT, 'DATEI.TXT');
reset(ftxt,1);
SIZE := FileSize(FTXT);

oder besser: Du benutzt findfirst aus SysUtils und TSearchRec.size und sparst Dir die Filevariable und das Reset:

Code: Alles auswählen

var
  ts: TSearchRec;
begin
if findfirst('DATEI.TXT', faAnyFile, TS)=0 then begin
   writeln('FF: ', ts.size);
end;

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von Hercules »

Hallo Frank,
vielen Dank, mit
FTXT: File;
hat das funktioniert.
Danke und schönen Abend noch.
Gruß Hercules. :D

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von mschnell »

IMHO: Mehr "Pascal-Like":

Code: Alles auswählen

sl := TStringlist.create(Filename, fmread)// (oder so ähnlich)
if sl.count = 0 then ....


-Michael
Zuletzt geändert von Lori am Sa 26. Mär 2011, 13:34, insgesamt 1-mal geändert.
Grund: Highlighter

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von theo »

@mschnell: Was ist denn das nu wieder? TStringList kann man nicht mit Parametern createn.
Manchmal frage ich mich echt, warum du einen Beitrag schreibst, wenn du k.A. hast. Bzw. wie man nach gefühlten hundertausend Beiträgen immer noch k.A. haben kann.

Was einfach wäre:

Code: Alles auswählen

uses FileUtil;
FileSize(FileName);

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von Hercules »

Hallo Theo,
war die letzten Tage nicht in der Firma, deshalb erst heute eine Anwort auf Deinen Beitrag.
Vielen Dank.
Ich habe folgende Befehle geschrieben:

Code: Alles auswählen

uses FileUtil;
FLGR: Integer;
FLGR := FileSize(FileName);

Danach habe ich in FLGR irgend einen Wert erwartet.
Aber der war immer Null (0).
Mach ich da noch was falsch, oder habe ich das noch nicht verstanden ? :?:

Grußß, Hercules :D
Zuletzt geändert von Lori am Do 31. Mär 2011, 00:06, insgesamt 1-mal geändert.
Grund: Highlighter

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von mschnell »

theo hat geschrieben:@mschnell: TStringList kann man nicht mit Parametern createn.
Ich sach ja: "oder so ähnlich". Ich meine natürlich TStringlist kreieren und mit LoadFromFile an eine Datei koppeln. Da TStringlist dies angesagte Methode ist, um mit Textdateien umzugehen, könnte man das auch hier so machen. Es war ja explizit nach Textdatei gefragt und nicht nach beliebiger Datei (keine Ahnung warum).

-Michael

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von baba »

Hercules hat geschrieben:Hallo Theo,
war die letzten Tage nicht in der Firma, deshalb erst heute eine Anwort auf Deinen Beitrag.
Vielen Dank.
Ich habe folgende Befehle geschrieben:

uses FileUtil;
FLGR: Integer;
FLGR := FileSize(FileName);
Danach habe ich in FLGR irgend einen Wert erwartet.
Aber der war immer Null (0).
Mach ich da noch was falsch, oder habe ich das noch nicht verstanden ? :?:

Grußß, Hercules :D


Du hast FileName schon durch einen echten Dateinamen ersetzt? Oder?

Wie wäre es mit einem FileExists(filename)

Baba.

[code=laz][/code]

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von theo »

Hercules hat geschrieben:Mach ich da noch was falsch, oder habe ich das noch nicht verstanden ? :?:


Müsste klappen, wenn in FileName ein existierender/gültiger Dateipfad steht.
Bis du unter Win und hat dein Dateipfad Umlaute oder sonstigen Schrott drin?

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von indianer-frank »

mschnell hat geschrieben:Ich sach ja: "oder so ähnlich". Ich meine natürlich TStringlist kreieren und mit LoadFromFile an eine Datei koppeln. Da TStringlist dies angesagte Methode ist, um mit Textdateien umzugehen, könnte man das auch hier so machen. Es war ja explizit nach Textdatei gefragt und nicht nach beliebiger Datei (keine Ahnung warum).

Wieder falsch! Damit ergibt sich nur die Anzahl der Zeilen, aber nicht die Dateigröße.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von carli »

indianer-frank hat geschrieben:
mschnell hat geschrieben:Ich sach ja: "oder so ähnlich". Ich meine natürlich TStringlist kreieren und mit LoadFromFile an eine Datei koppeln. Da TStringlist dies angesagte Methode ist, um mit Textdateien umzugehen, könnte man das auch hier so machen. Es war ja explizit nach Textdatei gefragt und nicht nach beliebiger Datei (keine Ahnung warum).

Wieder falsch! Damit ergibt sich nur die Anzahl der Zeilen, aber nicht die Dateigröße.

Und nebenbei gesagt ist das ziemlich mit Kanonen auf Spatzen geschossen, die komplette Datei einzulesen, nach Zeilenenden zu trennen und in eine Klasse zu stopfen, bloß um herauszufinden, dass die Zeilenanzahl 0 ist.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von Maik81ftl »

Hab die hier mal grade so richtig durchgelesen, und mußte innerlich lachen :lol: Dateigrößenabfrage hab ich mal für ein Kopierschutz verwendet^^ das Teil lief auch Sehr gut, nur mit den Unterschied, das eine änderung von einen bit das ganze Programm löschte ^^

mal sehen, ob ich die zeilen noch finde und in eine Abfrage auf "leer" umändere.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von Hercules »

Hallo baba, hallo theo,
der FileName hat gestimmt, das war schon so OK.
Aber: Ich hatte die Datei in der gleichen Anwendung noch als
Textdatei geöffnet, z.B

Code: Alles auswählen

F: TextFile.
AssignFile(F,'Datei.txt');
Reset(F);


Erst nachdem ich die mit CloseFile(F) geschlossen hatte
wirkte FLGR := FileSize('Datei.txt');
und die Füllung wurde mir in FLGR angezeigt.
Vielen Dank für den Hinweis, hat was gebracht. :wink:
Schönen Tag noch,
Hercules. :D
Zuletzt geändert von Lori am Do 31. Mär 2011, 19:25, insgesamt 1-mal geändert.
Grund: Highlighter

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von pluto »

Ich weiß jetzt nicht mehr wie genau die Funktion heißt ob GetFileSize oder nur FileSize. Jedenfalls wird sie mit einem Dateinamen als Parameter aufgerufen und liefert die Größe in byte zurück.
In den Internet Foren gibt es sehr viele Funktionen, mit den man diese Byte umrechnen kann auf MB oder GB und der gleichen. Bei einigen kann man sogar bestimmen ob durch 1024 oder durch 1000 gerechnet wird(Also entweder MB oder MiB).
MFG
Michael Springwald

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Dateigröße von einer Textdatei ermitteln

Beitrag von Maik81ftl »

pluto hat geschrieben:Ich weiß jetzt nicht mehr wie genau die Funktion heißt ob GetFileSize oder nur FileSize. Jedenfalls wird sie mit einem Dateinamen als Parameter aufgerufen und liefert die Größe in byte zurück.
In den Internet Foren gibt es sehr viele Funktionen, mit den man diese Byte umrechnen kann auf MB oder GB und der gleichen. Bei einigen kann man sogar bestimmen ob durch 1024 oder durch 1000 gerechnet wird(Also entweder MB oder MiB).


FileSize ist diese Function. eine GetFileSize wäre mir wirklich neu.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Antworten