delphi文件操作


======================================================
注:本文源代码点此下载
======================================================

delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用.

但: input:只读、output:只写。用时注意以免引起异常.

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

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

1.文件类型

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

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

2. 文本文件

(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:http://hi.baidu.com/nsgtao/ ****)

2.1 文本文件的概念

在delphi中定义了textfile类型表示文本文件,由字符的ascii码组成,最小存取单位为字符。文本文件也称为ascii码文件。利用常见的文字编辑器可以浏览支件内容。

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

2.2 文本文件变量的定义

定义文件变量的语法格式如下:

var :textfile;

例如,var mytextfile : textfile;就定义了一个文本文件变量mytextfile,下面就可以通过此变量引用一个文本文件。

2.3 文本文件的使用

(1)文件变量与文件关联

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

procedure assignfile(var f;filename:string);

其中,f为文件变量名,定义为无类型参数是为了和所有文件类型兼容;filename是文件名字符串,是包括路径的文件全称名。例如,assignfile (f,'e:\delphi\program\extl.txt’);就将文件变量f和指定的文件e:\delphi\program\extl.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 writeln([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;

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);//关闭已打开的文件textf

end.

被创建的文件中包含5行文本,如第3行为:this is line#3。

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

写入文件

var

f : textfile; //申明变量

begin

assignfile(f,'c:\ek.txt'); //让变量f和c:\ek.txt关连

rewrite(f); {create a new file named ek.txt}

writeln(f,'你要写入文本文件的内容'); //写入文件

closefile(f); //释放变量f

end;

读取文件

var

f : textfile;

str:string;

begin

assignfile(f, 'c:\ek.txt');{assigns the filename}

reset(f);{opens the file for reading}

readln(f, str);

showmessage('1. line of textfile:' +str);

closefile(f);{closes file f}

end;

下面转自http://blog.csdn.net/xwchen/archive/2007/07/26/1710410.aspx

var f:text;

...

assignfile(f,'c:\1.txt');

rewrite(f);

writeln(f,'this is a test');

closefile(f);

...

其中rewrite是新建文件,若换成reset则为打开文件

writeln为行写入并换行,write为写入不换行,readln为读一行并换行,read为读但不换行

delphi 读写文件方法有很多种:

我送你一贴:

程序设计当中我们时常遇到需要处理文件、目录及驱动器的情况,本章将对如何处理不同类型的文件进行讲述。本章包括如何使用t f i l e s t r e a m 类封装文件的输入/输出以及如何利用3 2 位wi n d o w s 的主要特征—内存映射文件。你将学习到如何创建一个封装了内存映射文件功能的t m e m o r y m a p p e d f i l e类,并用它在文本文件中进行文本查询。本章还提供了一些关于选择驱动器、在树型目录中查询文件及获取文件版本信息的方法。本章将使你对文件、目录及驱动 器有深入的认识。

处理文件的输入/输出

你将要对三种文件进行处理:文本文件、类型文件和二进制文件。

以下几节是关于文件输入/输出的讲解。文本文件指可被任意文本编辑器读取的a s c i i 文本。类型文件指包含由程序员定义的数据类型的文件。二进制文件包含了其他所有的类型,它是对包含任意格式或无格式数据的文件的统称。

文本文件的处理

本节讲述使用内建于object pascal 运行时库中的过程和函数处理文本文件的方法。在对文本文件进行任何处理之前,首先要打开此文本文件。声明变量:通过此变量可以来引用一个文本文件。

打 开一个文件需要两步:首先是a s s i g n f i l e ( ) ,它可以将文件变量与一个文件关联起来。例如:这时,你可以进行第二步:打开文件。有三种方式打开文件:使用r e w r i t e ( )过程创建并打开文件;对于一个已存在的文件,此操作将使文件被覆盖;使用r e s e t ( )过程只读地打开一个文件;使用append() 过程向已存在的文件追加文本。

注意reset()将以可读写方式打开类型文件和无类型文件。可以使用c l o s e f i l e ( )来关闭一个已打开的文件。下例是各种调用的函数。

文件的打开与关闭

assignfile :把一个外部文件名和一个文件变量相关联

reset:打开一个存在的文件

rewrite :创建并打开一个新文件(或覆盖原有文件)

append :以添加方式打开一个文件(只适用于文本文件)

closefile:关闭一个打开的文件

fileopen:打开一个特定的文件并返回文件句柄

filecreate:创建一个给定文件名的文件并返回文件句柄

fileclose:关闭一个特定句柄的文件

后边三个文件主要供系统内部使用,在文件复制的编程中也往往会用到。它们操作的对象是文件句柄而不是文件变量。

文件定位

seek:把文件当前位置移到指定部分

filepos:返回文件的当前位置

eoln:返回行结束标志

eof:返回文件结束标志

fileseek:改变当前文件指针的位置

还有个问题,如何判断文件已打开?要不要读写完之后就关闭文件,下次读或者写时再打开?

正常情况下是这样

用tfilestream

对于通过byte数组进行文件操作的,在ftp中经常会使用到,我也是在delphi调用web service进行文件的上传和下载时找到这两个函数的,挺好用的,推荐给大家。(申明:非本人所写)

1. 将byte数组生成文件

procedure bytearraytofile(const bytearray : tbytedynarray; const filename : string );

var

count: integer;

f: file of byte;

ptemp: pointer;

begin

assignfile( f, filename );

rewrite(f);

try

count := length( bytearray );

ptemp := @bytearray[0];

blockwrite(f, ptemp^, count );

finally

closefile( f );

end;

end;

2. 将文件生成byte数组

function fiietobytearray(const filename:string ):tbytedynarray;

const

block_size=1024;

var

bytesread,bytestowrite,count:integer;

f:file of byte;

ptemp:pointer;

begin

assignfile( f, filename );

reset(f);

try

count := filesize( f );

setlength(result, count );

ptemp := @result[0];

bytesread := block_size;

while (bytesread = block_size ) do

begin

bytestowrite := min(count, block_size);

blockread(f, ptemp^, bytestowrite , bytesread );

ptemp := pointer(longint(ptemp) + block_size);

count := count-bytesread;

end;

finally

closefile( f );

end;

end;

function encrypt(mstr: string; mkey: string): string;

var

i, j: integer;

begin

j := 1;

result := '';

for i := 1 to length(mstr) do begin

result := result + char(ord(mstr[i]) xor ord(mkey[j]));

if j + 1 关注我收藏该文与我联系


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
Windows的通用应用程序的类名 使用API函数复制移动文件 使用API访问ListBox项 使用GetTempFileName创建一个唯一的临时文件 使用INI文件 使用INI文件保存、装载字体信息 使用TFileStream 使用TStream保存字符串 使用TTreeview显示目录 使窗体的关闭按钮失效 修改文本文件 允许在资源管理器拖放文件 减小EXE文件大小 列举驱动器 列出目录下的子目录 创建快捷方式 创建目录 删除文件到回收站 判断文件夹是否共享 剪贴板存放多个控件流 加载CDROM图标 压缩和解压流 取MP3的ID3-Tag 取Program files目录 取可执行文件类型 取和文件类型关联的应用程序 取当前程序所在目录 取指定文件的版本信息 取文件修改日期 取文件日期 取文件最后访问日期 取文件版本号 取文件的所有者 取目录大小 取磁盘可用空间和总空间 取设置当前目录 取设置文件夹的日期 向Exe文件添加数据 向文件写添加文本 在TMemo光标位置插入一个文件 在Windows开始后自动运行一个程序 在应用程序添加Exe文件并且执行 在文件搜索字符串 在文件搜索指定文本 在文本文件搜索文本 将剪贴板复制到流和恢复 将文本文件赋值给一个字符串 将资源文件Rft文本装载到TRichEdit 将长文件名转换成短文件名 彻底删除文件 打开资源管理器且显示指定文件夹 捕获DOS应用程序的输出 改变TPageControls的颜色 改名、移动、删除文件或目录 显示‘打开方式’对话框 显示文件属性对话框 显示目录选择对话框 显示目录选择对话框并指定初始目录 替换正运行的DLL 检查文件是否ASCII格式 检查文件是否在本地驱动器 检查文件是否已打开 检查文件是否正在使用 检查目录是否存在 比较两个文件是否相同 添加去掉路径名后的符号 添加文件到文档菜单 清空文档 获取文件类型 获得快捷方式信息 获得文件大小 计算文件的校验和 设置文件日期 读 table-textfileStringGrid 读取二进制文件使用ASCII显示 转换OEM到ANSI 转换短文件名为长文件名 运行一个程序或打开一个关联文件 返回UNC路径 通过CRC-32验证文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值