![]() |
Delphi-Version: XE
Größe von TStrings in Byte ermitteln
Hallo,
ich lese eine Datendatei zur schnelleren Bearbeitung in eine Stringliste vom Typ TStrings ein und möchte gerne anhand der Stringliste erfahren, wie groß die eingelesene Datei in Byte ist. Leider definiert die Stringlist-Klasse keine entsprechende Funktion und ich habe nur Funktionen gefunden, um die Anzahl der Strings auszulesen. Habe ich da etwas übersehen oder muss ich wirlich für jeden Eintrag in der Stringlist die Länge bestimmen und diese zu einer Größenvariable addieren? Danke schon mal für die Hilfe. |
AW: Größe von TStrings in Byte ermitteln
Anzahl der enthaltenen Zeichenketten mal Länge der Zeichenketten.
Nachtrag: Und eventuell noch die Anzahl der Zeilenumbrüche (Linefeed, Carriagereturn) dazu addieren. |
AW: Größe von TStrings in Byte ermitteln
Und das Ganze mit SizeOf(Char) multiplizieren, sonst kommt bei Unicode ein falsches Ergebnis raus.
[edit] Müsste doch auch mit Length(Stringlist.Text) * SizeOf(Char) zu machen sein, das wäre zumindest einfacher. [/edit] |
AW: Größe von TStrings in Byte ermitteln
Stimmt ich habe die Text Eigenschaft vergessen.
|
AW: Größe von TStrings in Byte ermitteln
Und was spricht gegen filesize ?
Gruß K-H |
AW: Größe von TStrings in Byte ermitteln
Zitat:
Wenn man die Eigenschaft Text verwendet werden alle Zeilenvorschübe auf #13#10 angepasst (auch, wenn in der Datei evtl. nur #10 verwendet wird), und die letzte Zeile wird auch mit #13#10 beendet (auch wenn die Datei am letzten Zeichen der letzten Zeile ohne weiteren Zeilenvorschub endet.) Beispiel:
Delphi-Quellcode:
Erste Ausgabe 20, zweite 24.
const
_sContent = 'Zeile1'#10'Zeile2'#10'Zeile3'; var sl : TStringList; begin sl := TStringList.Create; try ShowMessage(IntToStr(Length(_sContent))); sl.Text := _sContent; ShowMessage(IntToStr(Length(sl.Text))); finally sl.Free; end; end; Das gilt auch, wenn man die Daten aus einer Datei einliest. Deswegen kann man mit TStringList auch so schön Dateien mit die #10 als Zeilenvorschub haben durch laden und speichern mit #13#10 versehen :wink: |
AW: Größe von TStrings in Byte ermitteln
Und nicht zu vergessen die Zeichenkodierung der Datei.
Also nein, du kannst nicht Anhand der StringList auf die Größe der Datei zurückschließen. |
AW: Größe von TStrings in Byte ermitteln
Wobei p80286 schon Recht hat, wozu mit TStringlist rumhantieren, wenn das über FileSize einfacher geht? Oder von hinten durch die Brust ins Auge: einen Stream erstellen, Datei laden und Stream.Size auslesen :stupid:
|
AW: Größe von TStrings in Byte ermitteln
FileSize geht leider nicht, da es sich um eine verschlüsselte Datei handelt, die entschlüsselt und dann ins StringList eingelesen wird. Die Dateigrößen zwischen verschlüsselter und entschlüsselter Datei sind nicht gleich.
Sobald die Datei entschlüsselt ist, steht in ihr die entschlüsselte Dateigröße, die ich mit der tatsächlichen gegenprüfen muss. Deswegen meine Frage nach der Größe... Was ich auch ausschließen kann ist Unicode, jedes Zeichen ist also als AnsiChar codiert. Insofern werde ich wohl die Anzahl der StringList-Einträge und die jeweiligen Zeichenlängen durchgehen müssen. Hätte ja sein können, dass es einfacher geht. |
AW: Größe von TStrings in Byte ermitteln
Aber auch damit bekommst Du u.U. nicht die exakte Dateigröße, wie oben bereits demonstriert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz