让编程改变世界
Change the world by program
Delphi7的文件系统
通常所说的文件是指存放在磁盘上的一组数据的集合,也称为磁盘文件。 文件的分类:按文件中的数据格式分,文件可分成“文本文件” 和“二进制文件”。
[文本文件]
存放的是与数据对应的字符的ASCII码,一个字符占一个字节。 如有实数-1234.567,要存放在文本文件中,将以字符'-'、'1'、'2'、'3'、'4'、'.'、'5'、'6'、'7'的形式存放,占9个字节。
[二进制文件]
数据都是以二进制形式存放的,数据在文件中存放的格式和它在内存中的格式是一样的。 如 -1234.567 可看成是一个Real型数据,在内存中占4个字节。 可见,二进制形式存放数据占有存储空间较少,但不直观。文本文件占用的存储空间较多,比较直观。
使用磁盘文件的步骤
[常识补丁]
磁盘文件是存放在磁盘上的,而运行的程序只能处理在内存中的数据,不能直接处理磁盘等外存储器上的数据。(小鱼画图时间) 因此只有把磁盘文件中的数据读到内存中,才能在程序中使用。 同样,程序中产生或修改的都是内存中的数据,必须把这些数据写到相应的文件中去,才能使数据保存下来。 可见,磁盘文件在使用之前必须“打开”,在使用完毕后应要“关闭”。
[常见的实现方式]
创建文件
读取文件
向一个文件的末尾添加数据
读文件中某一位置的数据(随机读)
修改文件中某一位置的数据(随机写)
文件指针
问题:如何在一个文件中间部分写入数据?
磁盘文件打开后,将会产生一个指针,它指向下一次要读写的数据位置,该指针称为文件指针。 文件指针具有自动移动的功能,文件刚打开时,文件指针指向磁盘文件中的第1个数据,当读取了这个数据后,文件指针自动指向下一个数据。 当把数据写入某个文件时,文件指针总是自动指向下一次要写入数据的位置。
Delphi 7中的文件类型及文件类型变量的定义
在Delphi 7中,经常使用的文件有两类:TextFile(文本文件)和 File(二进制文件) TextFile 文件中包含着我们能读懂的文本。 File 存放形式是二进制,一般用来存放记录类型的数据(称记录型文件)。
文本文件变量的定义
使用文件前需要定义一个文件型的变量,文本文件型变量的定义格式与功能如下:
[定义一个文本文件变量]
[codesyntax lang="delphi"]
Var
文本文件变量名: TextFile;
[/codesyntax] 如: [codesyntax lang="delphi"]
var
FishcFile:TextFile;
[/codesyntax] 该语句定义了一个TextFile 类型的文本文件变量,变量名为FishcFile。 该变量可以与一个文本文件相联系,文本文件中可以用来存放字符。
文本文件的使用
再次强调一下:文本文件在使用之前必须要打开(加载到内存),对打开的文件可以进行读写操作,读写过后要关闭。
文本文件的打开
打开文本文件可分成两个步骤:
一是把文件变量与实际的文本文件关联起来;
二是打开相应的文本文件。
关联文本文件变量与文本文件
可通过AssignFile过程来关联文件变量与实际的磁盘文件,该过程的格式与功能如下: [codesyntax lang="delphi"]
procedure AssignFile(var F; FileName: string);
[/codesyntax] 如: [codesyntax lang="delphi"]
AssignFile(FishcFile, ‘Fishc.txt’);
[/codesyntax]
[说明]
关联了文件类型变量与磁盘文件过后,下面对磁盘文件的操作就可以通过文件型变量来进行了,程序中就不需要再与具体的磁盘文件打交道。
打开文本文件
把磁盘文件与文件型变量关联在一起后,就可以打开文件,打开文件可使用Reset、Rewrite 或Append过程中的一个来进行。
[Reset] 以”只读”方式打开procedure Reset(var F [: File; RecSize: Word ] );
看上去很复杂? 没事,其实我们只需要这么调用即可:Rewrite(FishcFile);
[Rewrite] 以”只写”方式创建与打开procedure Rewrite(var F: File [; Recsize: Word ] );
注意:如果磁盘上有一个同名的文件,该文件将被删除并创建一个新的空文件。当前文件指针将置于空文件的开头。
[Append] 以”添加”方式打开procedure Append(var F: Text);
注意:使用这种方式打开文件后,文件指针位于文件的结尾。
Pay attention
参数Word是一个可选参数,当文件是一个无类型的文件时,该参数用来定义无类型文件的尺寸大小。 三种方式,如果指定的文件已经打开,将首先关闭该文件,然后再创建/打开它,当前文件指针将置于空文件的开头。 当使用 Append 和 Reset 的时候,如果打开的文件不存在,将会出现一个错误。
文本文件的关闭
关闭文件使用CloseFile过程:
procedure CloseFile(var F); 注意:使用CloseFile 过程关闭文件时,对文件的更新将实际写到磁盘文件中去,并断开文件型变量 F 与实际的磁盘文件之间的联系。
[成对出现]
AssignFile(FishcFile, ‘Fishc.txt'); …… …… CloseFile(FishcFile);
文本文件的写操作
[写操作]
可以使用Write 和Writeln 过程向文本文件中写入数据。 Write 只是把指定数据写到文本文件中去,Writeln 不仅把数据写到文本文件中去,而且还要在写入的数据后加上换行符。 用这两个过程输出的数据可以是以下类型:Char、Byte、Shortint、Word、Longint、Cardinal、Single、Real、Double、Extended、Currency、PChar、AnsiString、ShortString、string、Boolean、Bool。
Write过程的格式和功能如下:
[codesyntax lang="delphi"]
procedure Write( [var F: Text; ] P1 [ , P2,..., Pn] );
[/codesyntax] 功能:向文件型变量F关联的文件中写入P1,P2,…,Pn 等表达式的值。 另外,在相应的数据后增加一个“:”和一个表示域的宽度的数字可以指定域宽和小数位。
尝试一下:Example(课件及源代码下载)
小数位的指定方法是在域宽数字后加“:”再加上表示小数点位数的整数。
尝试一下:Example2(课件及源代码下载)