532628838
圣骑士
圣骑士
  • 注册日期2011-06-10
  • 发帖数98
  • QQ
  • 火币517枚
  • 粉丝77
  • 关注39
阅读:2784回复:0

delphi文件操作

楼主#
更多 发布于:2011-08-01 17:04
 文件是由文件名标识的一组数据的集合,文件通常存放在磁盘上。源程序、学生档案记录、图形、音乐等均可以作为文件存储在磁盘上。操作系统是以文件为单位对数据进行管理的,也就是说,如果想读取外存介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外存介质上存储数据,也必须先建立一个文件(以文件名标识),才能向它输出数
据。
    在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘上,以后需要时再从磁盘中输入到计算机内存。这就要用到磁盘文件。
1文件类型    ‘
    file是一个文件类型说明符,通过file可以定义文件变量,也可以定义一些新的类型。在Delphi中支持下面3种类型的文件:即文本文件、类型文件和无类型文件(也称二进制文件)。下面依次介绍3种文件类型变量的定义及使用方法。
    Delphi程序设计中,对任何一种文件的操作都可以归纳为:建立_打开_读/写_关闭。
2  文本文件
    1.文本文件的概念
    在Delphi中定义了TextFile类型表示文本文件,由字符的ASCII码组成,最小存取单位为字符。文本文件也称为ASCII码文件。利用常见的文字编辑器可以浏览支件内容。
    文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。在一个打开的文本文件上同时进行读、写操作是不允许的。
    2.文本文件变量的定义
    定义文件变量的语法格式如下:
    var  <文件变量名>:TextFile;
    例如,Var myTextFile:TextFile;就定义了一个文本文件变量myTextFile,下面就可以通过此变量引用一个文本文件。
    3.文本文件的使用
    (1)文件变量与文件关联
    在使用文件变量进行文件操作之前,需要将文件变量与要操作的文件关联,即给文件变量名赋值。文件变量赋值可以使用过程AssignFile,过程的说明语法格式如下:
  procedure AssignFile(Var F;FileName:string);
其中,F为文件变量名,定义为无类型参数是为了和所有文件类型兼容;FileName是文件名字符串,是包括路径的文件全称名。例如,AssignFile(F,’e.\delphi\program\textl.txt’);就将文件变量F和指定的文件e:\delphi\program\textl.txt关联起来。后面所有对变量f的操作都是对指定文件的操作。
    (2)使用文件变量打开文件
    使用不同的过程打开文件,有3种方式:
    procedure Rewrite(var F~File[;recsize:word]);
    这个过程创建并打开文件,可以对文件进行写。这里的F是一个已经和指定文件名关联的文件变量。对于一个已存在的文件,此操作将覆盖原文件;如果文件不存在,将建立一个新的空文件。若是类型文件(下一小节介绍),可用recsize指定大小。·
 
 procedure Reset(var F:File[;RecSize:Word]);
    使用Reset过程以读的方式打开一个文件,此时只能从文件中读取数据。f为文件变量,打开文件后,文件指针指向文件开头。如果试图用reset过程打开一个不存在的文件时,将有I/O错误产生。
    procedure.Append(var F:’Fext);
    使用Append过程向已存在的文件追加文本,这个过程仅用于文本文件。当用append过程打开文件时,文件指针指向文件的尾部,此后输入的数据将添加在文件原有数据的后面。该过程打开的文件(即F关联的文件)必须存在,否则也将出现I/O错误。
    (3)读/写文件
    ①读取文件内容。在以读的方式打开文件后,可以使用read和readln语句来读取文件内容,其声明代码格式分别为:
    procedure read([var F:’Fext;]V1[,V2,…,Vn]);
    procedure readln([var F:’text;]v1[,V2,···,Vn]);
其中,F为文件变量。v1、v2、…、vn等为需要输入的变量,其类型可以为字符串、字符、整数和实数类型。read和readln的区别为后者在读取数据后,将文件指针移至下一行,上次读取的数据与回车符之间的数据被忽略。
    当读取字符串时,必须用readln过程,否则读完一行数据后,再使用read读取字符串将得到空串。当读取整型和实型数据时,文件中的数据用空格分隔,且必须符合数据格式,否则将产生I/O错误。
    在读取文件时,还必须判断文件指针是否已到文件尾部,此时可以用Eof函数进行判断,其声明代码如下:
    function Eof[(‘var F:’rext)]:Boolean;
    当文件指针指到尾部时,该函数返回值为true。
    ②向文件写入数据。以写的方式打开文件后,即可向其中写入数据,写人数据使用write和
writeln过程,其声明代码如下:
    procedure wri‘teln([var F:’rext;]p 1[,p2,…,pn]);
    procedure write([var F:‘rext;]p 1[,p2,‘·‘,pn]);
    与read相似,p 1、p2、…、pn等为需要输出的变量,可以是字符串、字符、整数和实数类型。一writeln在写入数据后还会附加上回车和换行符,而下次要写入的数据将写在新的一行。
    写人数据时系统自动将数据转化为字符串形式,1)~ASCII码的形式保存在文件中。
   (4)使用文件变量关闭文件
    无论是输入或输出,在对文件操作完成后,都应关闭文件。关闭文件使用CloseFile过程,其声明代码如下:
    procedure CloseFile(var F);
    关闭文件后,系统释放打开文件时使用的资源。特别是写文件时,在调用write和writeln过程时,数据先写入内存缓冲区,只有在缓冲区满或关闭文件时,才把数据真正写入磁盘文件中,因此写完数据后不关闭文件可能丢失数据。
   例2.15  使用Rewrite()过程在程序运行的当前目录下创建一个文本文件file.txt,并向文件中增加5行文本。

    Var
    textf:TextFile;    //定义文件变量textf
    S:String;
    i:Integer;
    1    ‘
    begin    ‘
    AssignFile(textf,’file.txt’);  //将文件变量textf与当前目录中的“file.txt"文件关联
    Rewrite(textf);    //创建文件或打开已存在的文件进行覆盖
    for i:=1 to 5 do
    1    ●
    begin
    S:=’This is Line#’;
    writeln(textf,s,i);
    end;
    CloseFile(textf);    //关闭已打开的文件textf
    end.
    被创建的文件中包含5行文本,如第3行为:This is line#3。
    若要向一个已存在的文件追加新文本,应将其中的rewrite改为append。以上程序是向文件中写入字符串和整数。其实,Object Pascal对于所有的数据类型都可以这样处理。下面的程序演示了从文本文件中读取数据的方法。



喜欢0 评分0
游客

返回顶部