Difference between revisions of "TFileStream/de"
(→Konstanten für den Dateizugriff: Weiter Konstanten eingefügt) |
(Seite überarbeitet und inhaltlich korrigiert) |
||
Line 1: | Line 1: | ||
− | {{ | + | {{Translate}} |
− | + | ||
Zurück zu den [[File types/de|Dateitypen]].<br> | Zurück zu den [[File types/de|Dateitypen]].<br> | ||
− | + | ||
__TOC__ | __TOC__ | ||
− | + | ||
=Filestream= | =Filestream= | ||
− | + | Filestream ist eine Möglichkeit, Dateien einfach und schnell zu verarbeiten. Der Filestream bietet sich für die Verarbeitung von Dateien jeglicher Größe an. | |
− | + | ||
− | + | TFileStream bietet keine Pufferung, sodass bei wiederholtem Zugriff auf einen Teil einer Datei dieser in einen Puffer geladen werden sollte. Auch sollte nicht sequenziell Byte für Byte sondern nach Möglichkeit immer in Blöcken gelesen werden. Für höchste Lesegeschwindigkeit bei großen Dateien sollte sich die Blockgröße an der Größe der Seitengröße des Betriebssystems orientieren. | |
=Konstanten für den Dateizugriff= | =Konstanten für den Dateizugriff= | ||
Line 53: | Line 53: | ||
=Datei lesen= | =Datei lesen= | ||
+ | In diesen Beispielen wird die Datei vollständig in den Arbeitsspeicher geladen. Damit eignet sich dieser Ansatz nur für kleine bis mittelgroße Dateien. Je nach verfügbaren Arbeitsspeicher kann die sinnvolle Grenze bei einigen Kilobyte bis einigen Megabyte liegen. | ||
<syntaxhighlight> | <syntaxhighlight> | ||
... | ... | ||
Line 101: | Line 102: | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=Datei schreiben= | =Datei schreiben= | ||
Line 153: | Line 153: | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
[[Category:Tutorials/de]]{{AutoCategory}} | [[Category:Tutorials/de]]{{AutoCategory}} |
Revision as of 09:36, 25 April 2018
Zurück zu den Dateitypen.
Filestream
Filestream ist eine Möglichkeit, Dateien einfach und schnell zu verarbeiten. Der Filestream bietet sich für die Verarbeitung von Dateien jeglicher Größe an.
TFileStream bietet keine Pufferung, sodass bei wiederholtem Zugriff auf einen Teil einer Datei dieser in einen Puffer geladen werden sollte. Auch sollte nicht sequenziell Byte für Byte sondern nach Möglichkeit immer in Blöcken gelesen werden. Für höchste Lesegeschwindigkeit bei großen Dateien sollte sich die Blockgröße an der Größe der Seitengröße des Betriebssystems orientieren.
Konstanten für den Dateizugriff
Diese Konstanten bestimmen, wie auf eine Datei zugegriffen wird. Die Konstanten beginnend mit fmShare können immer mit angegeben werden, werden aber nicht von allen Betriebssystemen unterstützt.
Konstante | Dezimalwert | Beschreibung |
---|---|---|
fmCreate | 65280 | Erstellt eine neue Datei |
fmOpenRead | 0 | öffnet eine Datei lesend |
fmOpenWrite | 1 | öffnet eine Datei schreibend |
fmOpenReadWrite | 2 | öffnet eine Datei lesend und schreibend |
fmShareCompat | 0 | |
fmShareExclusive | 16 | exklusiver Dateizugriff; andere Programme können nicht auf die Datei zugreifen |
fmShareDenyWrite | 32 | sperrt den Schreibzugriff auf eine Datei |
fmShareDenyRead | 48 | andere Programme dürfen die Datei nicht lesen, aber weiterhin beschreiben (z.B. weitere Daten anhängen) |
fmShareDenyNone | 64 | andere Programme können weiterhin lesend und schreibend auf die Datei zugreifen. |
Datei lesen
In diesen Beispielen wird die Datei vollständig in den Arbeitsspeicher geladen. Damit eignet sich dieser Ansatz nur für kleine bis mittelgroße Dateien. Je nach verfügbaren Arbeitsspeicher kann die sinnvolle Grenze bei einigen Kilobyte bis einigen Megabyte liegen.
...
uses
Classes, SysUtils;
function funDateiEinlesen(strDateiname: string): string;
...
implementation
...
function funDateiEinlesen(strDateiname: string): string;
var
datQuelldatei: TFileStream;
begin
// öffnet eine Datei zum Lesen und sperrt sie gleichzeitig gegen Schreibzugriffe
datQuelldatei := TFileStream.Create(strDateiname, fmOpenRead or fmShareDenyWrite);
try
SetLength(funDateiEinlesen, datQuelldatei.Size);
datQuelldatei.Read(funDateiEinlesen[1], datQuelldatei.Size);
finally
FreeAndNil(datQuelldatei);
end;
end;
...
Beispiel für einen Unterprogrammaufruf um eine Datei einzulesen:
...
// fügt eine Datei an das Ende des Memos an
// das Ziel kann auch ein String sein usw.
memo1.Append(funDateiEinlesen('test.txt'));
...
end;
Datei schreiben
...
uses
Classes;
procedure subDateiSchreiben(strDateiname: string; strUebergabestring: string);
...
implementation
...
procedure subDateiSchreiben(strDateiname: string; strUebergabestring: string);
var
datZieldatei: TFileStream;
lngGroesse: longint;
begin
datZieldatei := TFileStream.Create(strDateiname, fmCreate);
lngGroesse := Length(strUebergabestring);
try
datZieldatei.Position := 0;
datZieldatei.Write(strUebergabestring[1], lngGroesse);
finally
FreeAndNil(datZieldatei);
end;
end;
...
Beispiel für einen Unterprogrammaufruf um eine Datei zu schreiben:
...
// schreibt den Inhalt eines Memos in eine Datei
// alternativ geht auch ein String
subDateiSchreiben('test1.txt', memo1.Text);
...
end;