Delphi的文件操作

时间:2022-07-26 23:37:16

参考自:http://www.cnblogs.com/railgunman/articles/1800318.html

  Delphi 中默认有input 和 output 两个文件变量,使用可以不用定义,直接使用。但是,input 只读、output 只写。使用的时候要注意以免引起异常。

  文件是由文件名标识的一组数据的集合,文件通常存在磁盘上。源程序、学生档案记录、图形、音乐等均可以作为文件存储在磁盘上。操作系统是以文件为单位对数据进行管理的,也就是说,如果想读取外存介质上的数据,必须先按文件名找到所指定的文件,然后再从文件中读取数据。要向外存介质上存储数据,也必须先建立一个文件(以文件名标识),才能向他输出数据

  在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘上,以后需要的时候再从磁盘中输入到计算机内存。这就要用到磁盘文件

1.文件类型

  file是一个文件类型说明符,通过file可以定义文件变量,也可以定义一些新的类型。在Delphi中支持下面3种类型的文件:即文本文件、类型文件和无类型文件(也叫二进制文件)。下面依次介绍3种文件类型变量的定义以及使用方法

  Delphi程序设计中,对任何一种文件的操作都可以归纳为:建立->打开->读/写->关闭

2.文本文件

  2.1文本文件的概念

  在Delphi中定义了TextFIle类型表示文本文件,由字符的ASCII码主场都能够,最小存取单位为字符。文本文件也可以成为ASCII码文件。利用常见的文本编辑器就可以浏览文件内容

  文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。在一个打开的文本文件上同时进行读、写是不允许的。

  2.2文本文件变量的定义

  定义文本文件的语法格式如下

var
//<文件变量名> : TextFile;
myTextFile : TextFile;
//上面这句就定义了一个文本文件变量myTextFile,下面就可以通过此变量引出一个文本文件

  2.3文本文件的使用

  <1>文件变量与文本关联

  在使用文件变量进行操作之前,需要将文本文件与需要操作的文件关联,即给文件变量名赋值。文件变量赋值可以使用过程 AssignFile,过程的语法格式如下:

procedure AssignFile(Var F; FileName : String);

  其中,F为文件变量名,定义为无类型参数是为了和所有文件类型兼容;FileName是文件名字符串,是包括路径的文件全称名。例如

AssignFile(F, 'E:\delphi\program\test.txt');

  就将文件变量F 和指定的文件 E:\delphi\program\test.txt 关联起来。后面所有对变量F 的操作都是对指定文件的操作

  <2>使用文件变量打开文件

  使用不同的过程打开文件,可以有3种方式

procedure ReWrite(var F: File[; recsize :word]);

  ReWrite过程创建并打开文件,可以对文件进行写。这里的F 是一个已经和指定文件名关联的文件变量。对于一个已经存在的文件,此操作将会覆盖源文件;如果文件不存在,将建立一个新的空文件。若是类型文件,可用recsieze 指定大小

procedure Reset(var F : File[; RecSize : Word]);

  使用Reset 过程以读的方式打开一个文件,此时只能从文件中读取数据。F 为文件变量,打开文件之后,文件指针指向文件开头。如果试图用Reset过程打开一个不存在的文件时,将有I/O错误产生。

procedure Append(var F: Text);

  使用Append 过程向已经存在的文件追加文本,这个过程仅用于文本文件。当用append 过程打开文件时,文件指针指向文件的尾部,此后输入的数据将添加在原有数据的后面。该过程打开的文件(即 F 关联的文件)必须存在,否则也将出现I.O错误

  <3>读/写文件

    1))读取文件内容。在以读的方式打开文件之后,可以使用readreadln语句来读取文件内的内容,其声明代码格式分别是:

procedure read([var F:Text; ]V1[, V2, ..., Vn]);
procedure readln([var F:Text;] V1[,V2, V3,...Vn]);

    其中,F为文本文件。v1、v2、...、Vn等为需要输入的变量,其类型可以为字符串、字符、整数、实数类型。read 和readln 的区别是后者在读取数据之后,将文件指针移至下一行,上次读取的数据与回车符之间的数据被忽略

    当读取字符串的时候,必须使用readln过程,否则读完一行数据之后,再使用 read读取字符串将得到空串。当读取整型和实型数据的时候,文件中的数据用空格分隔,且必须复合数据格式,否则将产生I/O错误。

    在读取文件时候,还必须判断文件指针是否已经到文件尾部,此时可以使用Eof 函数进行判断,其声明代码如下

function Eof([(var F : Text)]) : Boolean;

    当文件指针指到尾部的时候,该函数的返回值为true

    2))向文件写入数据。以写的方式打开文件之后,即可向其中写入数据,写入数据使用writewriteln 过程,其声明代码如下

procedure writeln([var F:Text;] p1[, p2, ..., pn]);
procedure write([var F :Text;] p1 [,p2, ...,pn]);

    与read 相似,p1、p2...pn等为需要输出的变量,可以是字符串、字符、整数和实数类型。writeln写入数据后还会附加上回车和换行符,而下一次写入的数据将写在新的一行

    写入数据时,系统自动将数据转化为字符串形式保存在文件中

  <4>使用文件变量关闭文件

  无论是输入还是输出,在对文件操作完成后,都应该关闭文件。关闭文件使用 CloseFile 过程,其代码的声明如下

procedure CloseFile(var F);

  关闭文件之后,系统释放打开文件时使用的资源。特别是写文件时,在调用write 和 writeln 过程时,数据先写入内存缓冲区,只有在缓冲区满或者关闭文件时,才把数据真正写入磁盘文件中,因此写完数据之后不关闭文件可能丢失数据

  例子,使用 ReWrite()过程在程序运行的当前目录下创建一个文本文件 file.txt,并向文件增加5 行文本

var
textf : TextFile; //定义文件变量
S : String;
I : Integer;
begin
AssignFile(textf, 'file.txt'); //将文件变量textf与当前目录中的“file.txt”文件关联
ReWrite(textf); //创建文件或打开已经存在的文件进行覆盖
for I := 1 to 5 do
begin
S := 'this is Line #';
writeln(textf, s, i);;
end;
CloseFile(textf); //关闭已经打开的文件
end.

  被创建的文件内包含5行文本,如第三行为:Thisis line#3

  若要向一个已经存在的文件追加新文本,应将其中的 rewrite 改为append。以上的程序是向文件中写入字符串和整数。其实,Object Pascal对于所有的数据类型都可以这样处理。下面的程序演示了从文本文件中读取数据的方法。

//写入文件
var
F : TextFile;
begin
AssignFile(F, 'c:\test.txt');;
rewrite(F);
writeln(F, '你要写入文本文件的内容');
CloseFile(F);
end;

  

//读取文件
var
F :TextFile;
str : String;
begin
AssignFile(F, 'c:\test.txt');
Reset(F); //Open the file for reading
Readln(F, str);
ShowMessage('1, line of textfile:' + str);
CloseFile(F);
end;

  

Delphi的文件操作的更多相关文章

  1. Delphi的文件操作(定义,关联,打开,读写,关闭)

    参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...

  2. delphi关于文件操作集锦

        关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...

  3. Delphi ini文件操作 TIniFile、TMemIniFile

    1.使用TIniFile unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Co ...

  4. delphi文件操作的总结

    csfinal90我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 windzb的专栏 目录视图 摘要视图 订阅 IT俱乐部创始人杜鸿飞专访       ...

  5. Delphi文件操作函数

    文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道.文件的本质是一个数据流,所有的文件实际上是一串二进制序列.文件管理包括:1.文件操作.2.目录操作.3.驱动器操作.三部分. 1.常见文 ...

  6. delphi文件操作(比较全)

    Delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用. 但: input:只读.output:只写.用时注意以免引起异常. 文件是由文件名标识的一组数据的集合,文件通常 ...

  7. Delphi对于文件的读写操作

    delphi文件操作 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: Functi ...

  8. Delphi 文件操作(路径、目录)

    Delphi利用系统环境变量获取常用系统目录 //譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取: var s: string; begin s := GetEnvironmentV ...

  9. delphi 资源文件详解

    delphi资源文件详解 一.引子: 现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便 ...

随机推荐

  1. db2学习笔记--数据类型对表的影响

    创建表的时为列选择合适的数据类型,可以提高数据库性能. 1.选择合适的数据类型,避免出现数据类型转换.例如日期,有人使用字符串来存放日期.时间戳,最后我们还要在程序中使用to_date做数据类型转换, ...

  2. jvm的垃圾回收原理

    什么是垃圾回收? 垃圾回收是Java中自动内存管理的另一种叫法.垃圾回收的目的是为程序保持尽可能多的可用堆(heap). JVM会删除堆上不再需要从堆引用的对象. 用一个例子解释垃圾回收? 比方说,下 ...

  3. Windows10一周年庆典壁纸

    example: 下载:http://pan.baidu.com/s/1b55D5k

  4. sql server中局部变量与全局变量的 申明与赋值(转)

    来源:http://www.111cn.net/database/mssqlserver/36734.htm 例子:http://www.cnblogs.com/sunxi/p/4497493.htm ...

  5. UNITY使用高通Vuforia导出XCode包编译出错

    1.referenced from: in libVuforia.a 此处重新导入引用库并按http://game.ceeger.com/forum/read.php?tid=20447(三楼处理方式 ...

  6. 精读《javascript高级程序设计》笔记三——面向对象的程序设计

    重点来了,我认为这一章值得好好地反复地看.看第一遍 还是懵懵懂懂,现在看第二遍,终于能看出点意思了. 创建对象 工厂模式 function createPerson(name, age, job){ ...

  7. HDU 3790 最短路径问题 &lpar;SPFA&rpar;

    转载请注明出处:http://blog.csdn.net/a1dark 分析:比一般最短路多了一个花费.多加一个判断即可.用的SPFA.这道题让我搞清楚了以前定义INF为啥爆的问题.受益颇多. #in ...

  8. git fetch

    http://www.ruanyifeng.com/blog/2012/07/git.html 流程 默认情况下,git fetch取回所有分支(branch)的更新.如果只想取回特定分支的更新,可以 ...

  9. cloudbase-init 自动扩盘的副作用 - 每天5分钟玩转 OpenStack(154)

    这是 OpenStack 实施经验分享系列的第 4 篇. cloudbase-init 的一项功能是自动扩展 windows 的 C 盘.比如 windows 镜像是 20G,在部署 instance ...

  10. azkaban的安装部署

    一.所需环境 1,JDK 2,HADOOP 4,mysql 3,HIVE 二.安装azkaban 1,安装git命令: yum install git 2,下载azkaban源码:git clone ...