Difference between revisions of "TFileStream"

From Free Pascal wiki
Jump to navigationJump to search
(Fix not setting result in "read 8 bytes" example)
 
(15 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
{{TFileStream}}
 
{{TFileStream}}
  
A '''TFileStream''' is a descendant of [[TStream]] that get its data from a file on disk. A TFileStream reads entire file data into memory.
+
A '''TFileStream''' is a descendant of [[TStream]] that gets/stores its data from/to a file on disk.
 
 
 
 
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
 
! Constant !! Decimal !! Description
 
! Constant !! Decimal !! Description
Line 28: Line 26:
 
|}
 
|}
  
read from file ''fnam''.
+
* read entire file ''fnam'' into a string.
<syntaxhighlight>
+
 
function readstream( fnam: string ): string;
+
<syntaxhighlight lang="pascal">
 +
function readstream(fnam: string): string;
 
var
 
var
 
   strm: TFileStream;
 
   strm: TFileStream;
 +
  n: longint;
 
   txt: string;
 
   txt: string;
 
begin
 
begin
 
   txt := '';
 
   txt := '';
   strm := TFileStream.Create( fnam, fmOpenRead or fmShareDenyWrite );
+
   strm := TFileStream.Create(fnam, fmOpenRead or fmShareDenyWrite);
 
   try
 
   try
     SetLength( txt, strm.Size );
+
    n := strm.Size;
     dat.Read( txt[1], strm.Size );
+
     SetLength(txt, n);
 +
     strm.Read(txt[1], n);
 
   finally
 
   finally
     FreeAndNil( strm );
+
     strm.Free;
 
   end;
 
   end;
 
   result := txt;
 
   result := txt;
Line 47: Line 48:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Write ''txt'' to file fnam.
+
* read 8 bytes of ''fnam'' into a byte array:
<syntaxhighlight>
+
 
procedure writestream( fnam: string; txt: string );
+
<syntaxhighlight lang="pascal">
 +
..
 +
type
 +
    TByte8Array = array [0..7] of byte;
 +
..
 +
function readstream(fnam: string; position= integer): TByte8Array;
 +
var
 +
  strm : TFileStream;
 +
begin
 +
  strm := TFileStream.Create(fnam, fmOpenRead or fmShareDenyWrite);
 +
  try
 +
    strm.Position:=position;
 +
    strm.Read (Result[0],8);
 +
  finally
 +
    strm.Free;
 +
  end;
 +
end;
 +
</syntaxhighlight>
 +
 
 +
* Write a string ''txt'' to the file ''fnam''.
 +
 
 +
<syntaxhighlight lang="pascal">
 +
procedure writestream(fnam: string; txt: string);
 
var
 
var
 
   strm: TFileStream;
 
   strm: TFileStream;
 
   n: longint;
 
   n: longint;
 
begin
 
begin
   strm := TFileStream.Create( fnam, fmCreate );
+
   strm := TFileStream.Create(fnam, fmCreate);
   n := Length( txt );
+
   n := Length(txt);
 
   try
 
   try
 
     strm.Position := 0;
 
     strm.Position := 0;
     strm.Write( txt[1], n );
+
     strm.Write(txt[1], n);
 
   finally
 
   finally
     FreeAndNil( strm );
+
     strm.Free;
 
   end;
 
   end;
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
[[Category:Tutorials]]
+
== See also ==
{{AutoCategory}}
+
* [[File types]]
 +
* [[doc:rtl/classes/tfilestream.html|TFileStream doc]]
 +
* [[doc:rtl/classes/tstream.html|TStream doc]]

Latest revision as of 16:22, 12 April 2022

Deutsch (de) English (en) français (fr) polski (pl)

A TFileStream is a descendant of TStream that gets/stores its data from/to a file on disk.

Constant Decimal Description
fmCreate 65280 Creates a new file
fmOpenRead 0 opens a file for reading
fmOpenWrite 1 opens a file for writing
fmOpenReadWrite 2 opens a file for reading and writing
fmShareDenyWrite 32 prohibit writing if file is already opened
  • read entire file fnam into a string.
function readstream(fnam: string): string;
var
  strm: TFileStream;
  n: longint;
  txt: string;
begin
  txt := '';
  strm := TFileStream.Create(fnam, fmOpenRead or fmShareDenyWrite);
  try
    n := strm.Size;
    SetLength(txt, n);
    strm.Read(txt[1], n);
  finally
    strm.Free;
  end;
  result := txt;
end;
  • read 8 bytes of fnam into a byte array:
..
type
    TByte8Array = array [0..7] of byte;
..
function readstream(fnam: string; position= integer): TByte8Array;
var
  strm : TFileStream;
begin
  strm := TFileStream.Create(fnam, fmOpenRead or fmShareDenyWrite);
  try
    strm.Position:=position;
    strm.Read (Result[0],8);
  finally
    strm.Free;
  end;
end;
  • Write a string txt to the file fnam.
procedure writestream(fnam: string; txt: string);
var
  strm: TFileStream;
  n: longint;
begin
  strm := TFileStream.Create(fnam, fmCreate);
  n := Length(txt);
  try
    strm.Position := 0;
    strm.Write(txt[1], n);
  finally
    strm.Free;
  end;
end;

See also