[Delphi/Pascal] Dateigröße/Zeilenanzahl ermitteln

tedlemegba

abgemeldet
20 April 2006
2.729
175
Ahoi!

Wie kann ich den bitte möglichst einfach die Anzahl von Zeilen oder die Dateigröße in Bits, Bytes oder was auch immer (aber bitte nicht in "Records" oder so einem Müll) einer (Text-)Datei ermitteln? Ich würde es gerne bitte ohne einen File-Stream oder sonstige Umstände lösen. FileSize und Length spucken mir imho auch nur falsche Daten aus.. oder ich müsste sie noch mit diversen Faktoren probieren (ich tat es schon mit 8 und 1024).. nichts scheint so wirklich richtig und die Google-Ergebnisse sind auch eher was für die Tonne. (Erst die Datei zeilenweise durchgehen wäre Overkill, das tue ich später; brauche die Größe/Zeilenanzahl aber vorher!)

Danke!
 
also ich kann zwar kein Delphi aber nen FileStream wird dir sicherlich keine falsche Dateigröße gegeben, schau doch mal im Manual nach, was du genau für einen Datentyp und welchen Wert du zurückbekommst
 
also ich kann zwar kein Delphi aber nen FileStream wird dir sicherlich keine falsche Dateigröße gegeben,

Hm... dann werde ich mir den Filestream wohl doch antun müssen.. entweder es wird gepfuschter Code, unübersichtlicher oder toller Code.. eher was schlechtes. Im Moment verarbeite ich die Datei nämlich so:

Code:
[FONT="Courier New"]  AssignFile(f, 'C:\file');
  Reset(f);
  // ...
  while not EOF(f) do
  begin
    ReadLn(f, s);
    // ...
    Application.ProcessMessages;
  end;
  // ...
  CloseFile(f);[/FONT]

Klappte soweit eigentlich auch.. allerdings will ich die Datei eh noch über einen OpenDialog auswählen und dann den Pfad+Dateinamen in einer Input-Box ausgeben (editierbar) anzeigen. Allerdings noch keinen Plan vom Dialog.. könnte also eine recht lustige Geschichte werden noch.

schau doch mal im Manual nach, was du genau für einen Datentyp und welchen Wert du zurückbekommst

Dieser Satz kein Verb.. und so ein richtiges/"das" Manual finde ich leider nicht.. außer die Hilfe-Datei. Allerdings suchte ich auch noch nicht wirklich intensiv danach. Mal sehen. Danke soweit.
 
Das geht auch ohne TFileStream ;)

PHP:
function GetFileSize(const S: string): Int64;
var
  FD: TWin32FindData;
  FH: THandle;
begin
  FH := FindFirstFile(PChar(S), FD);
  if FH = INVALID_HANDLE_VALUE then Result := 0
  else
    try
      Result := FD.nFileSizeHigh;
      Result := Result shl 32;
      Result := Result + FD.nFileSizeLow;
    finally
      CloseHandle(FH);
    end;
end;

Quelle: https://www.swissdelphicenter.ch/de/showcode.php?id=172 (Bsp. 4)
Solltest dir die Seite mal merken, ein riesiges Archiv ... ;)

Die Bytedarstellung stimmt bei mir genau mit dem Windows-Explorer überein, wenn du es in KB oder MB darstellen willst, musst du jeweils durch 1024 teilen und formatieren.
 
Die Bytedarstellung stimmt bei mir genau mit dem Windows-Explorer überein, wenn du es in KB oder MB darstellen willst, musst du jeweils durch 1024 teilen und formatieren.

Nee.. Bytes ist wunderobar, danke. Hm... kann sein, dass ich über diese Lösung stolperte, aber sie war mir wohl zu lange, auch wenn ich die Funktion irgendwo links liegen lassen kann. Werde ich nachher mal probiern. Danke! :>
 
CloseHandle(FH);

:arrow: External exception C0000008



Ist das STATUS_INVALID_HANDLE?


Edit: Ich probiere mal die Verarbeitung via Filestream.. wer weiß. :D
Edit: Access violation ...

Gut.. so viel dazu. :|

Edit: ohne CloseHandle(FH); geht ersteres, danke Flo (DelphiKing), nur ob das so gut/gesund ist?!
 
Zuletzt bearbeitet: