File

From Free Pascal wiki
Revision as of 05:49, 15 March 2012 by Michalis (talk | contribs) (Divide into sections for three file types. Add simplest example code for binary (typed and untyped) files reading.)

In a Pascal program, a variable of type file may be used to read or write (or both) to the file. A file variable is (usually) associated with a normal file on a disk using the AssignFile procedure (older, equivalent name: just Assign).

File types

Untyped binary

The type file represents an untyped binary file. Untyped means it's just a sequence of data (bytes). It may be used to store essentially anything. It can be read by BlockRead and written to by BlockWrite procedures. The word file itself is a reserved word in Pascal. Example:

<delphi>{$mode objfpc}{$H+} var

 MyFile: file;
 Data: array [0..99] of Byte;

begin

 AssignFile(MyFile, 'a');
 Reset(MyFile, 1 { size of read chunk });
 try
   BlockRead(MyFile, Data, SizeOf(Data));
 finally
   CloseFile(MyFile);
 end;

end.</delphi>

For larger example code, see BlockRead documentation.

Typed binary

The type file of Xxx, where Xxx is any simple (without references / pointers) type, is a binary file representing a sequence of Xxx values. For example, you can have files that are a sequence of integers, floating-point values, or records (as long as all record fields are still a simple type).

<delphi>{$mode objfpc}{$H+} var

 MyFile: file of Single;
 Data: Single;

begin

 AssignFile(MyFile, 'a');
 Reset(MyFile);
 try
   Read(MyFile, Data);
 finally
   CloseFile(MyFile);
 end;

end.</delphi>

Text file

The type TextFile (older, equivalent name: Text) represents a text file. Note that this is different than just file of char. There are various comfortable read and write operations available for text files, that parse integers, floating-point values and other types. Also, line endings are properly dealt with when you use text files.

See TextFile page for more information and examples.

Working with files

Working with all file types is similar:

  1. Associate a file with data. Usually by calling AssignFile (older, equivalent name: Assign).
  2. Open the file by Reset (read existing file, and maybe write --- see below), Rewrite (clear contents and write), or Append (keep contents and write). In case of Reset on an untyped binary file, the global FileMode variable determines if you can only read (fmOpenRead), or both read and write (fmOpenReadWrite), to the file.
  3. Then read/write file data by read, readln, write and writeln standard procedures. Some Pascal Compilers also used the Get and Put routines for I/O. For untyped binary files, use BlockRead and BlockWrite.
  4. At the end, release the necessary file resources (and possibly flush the data to be written) by calling CloseFile (older, equivalent name: just Close).

A file variable is used either for input, for output, or for both input and output (I/O). A file may be a screen and/or keyboard, a modem, a light pen, a touch screen, a mouse, an area of storage on disk, a socket for connecting to the Internet, or it could be some other device depending on how the run-time library ties the file. In some cases, actual memory can be defined as a file; this was used in the case of a ram disk. You can customize where the file data is by initializing FileRec record (for untyped binary files) or TextRec record (for text files), instead of calling standard AssignFile (Assign) routines.

File-related types, procedures and functions:

File - Text - AssignFile - CloseFile - Reset - Rewrite - Get - Put - Read - Readln - Write - Writeln