文件系统01

让编程改变世界

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(课件及源代码下载