您的当前位置:首页DELPHI 文件操作

DELPHI 文件操作

2022-02-20 来源:乌哈旅游
Delphi文件操作varfile_name:string;

file_name:='c:\\luther.gliethttp.txt';

FileWrite(com.log_fd,PChar(file_name)^,length(file_name));文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道。文件的本质是一个数据流,所有的文件实际上是一串二进制序列。

文件管理包括:1、文件操作。2、目录操作。3、驱动器操作。三部分。1、常见文件操作函数和过程。1.1、AssignFile过程

作用:将一个外部文件的文件名与一个File类型的变量关联,并对变量进行初始化。原型:procedureAssignFile(varF;FileName:String);

F:一个File类型的变量,可以是任何数据类型。FileName:外部文件的文件名。

1.2、FileExists函数

作用:用于测试指定文件名的文件是否存在。

原型:functionFileExists(constFileName:String):Boolean;

FileName:文件名。字符串类型。

注意:如果文件存在,返回True;否则,返回False。1.3、Append过程

作用:为在一个已经存在的文件末尾添加文本做好准备工作。文件是只写方式打开的。原型:procedureAppend(varF:Text);

F:一个TextFile类型变量。

注意:这是一个对文本类型文件操作的过程。其中变量F必须和外部文件关联。如果F没有与外部文件关联,将抛出异常。如果F已经处于打开状态,则过程会关闭F并重新打开。文件指针位置将被设置在文件末尾。1.4、Reset过程

Reset过程将以只读方式打开文件。作用:对于文本文件,对于类型文件和无类型文件,Reset过程将以可读写方式打开文件。

原型:procedureReset(varF[:File;RecSize:Word]);

F:File类型变量,可以是任何文件类型。

RecSize:文件的大小。它是一个可选的选项,只有当F为无类型文件时

才可以被指定。如果F为无类型文件,则RecSize指定了在数据传输过程中使用的记录的大小。如果参数RecSize被省略了,则默认的记录大小为128字节。

注意:当该过程打开文件时,如果文件不存在则产生异常。如果文件已经打开了,则先关闭文件,然后重新打开,并将文件指针放到文件开头处。默认的文件模式(FileMode)为2,即可读写模式。如果文件模式在调用Reset过程前都还未改变,则尝试打开一个只读文件会失败。当调用Reset过程后,如果文件为空,则Eof函数返回True,否则返回False。1.5、Rewrite过程

作用:对于一个已存在的文件,此操作将使文件被覆盖。对于一个不存在的文件,将创建并打开文件。对于一个已打开的文件,则关闭文件,并重新创建一个新的文件(覆盖原有的)。文件指针也被设置到空文件的开头处。

原型:procedureRewrite(varF:File[;Recsize:Word]);

F:File类型变量,可以是任何文件类型。

RecSize:文件的大小。它是一个可选的选项,只有当F为无类型文件时

才可以被指定。如果F为无类型文件,则RecSize指定了在数据传输过程中使用的记录的大小。如果参数RecSize被省略了,则默认的记录大小为128字节。

注意:如果F被指定为一个空的文件名,如:AssignFile(F,‘’),那么当Rewrite过程被调用时,F为标准的输出文件。如果F是文本文件,则F为只写模式。当调用Rewrite过程后,Eof(F)将总是为True。1.6、Flush函数

作用:用于清空以输出方式打开的文本缓冲区,保证所有写入的字符全部写入外部文件。原型:functionFlush(vart:Text):Integer;

F:F是文本类型变量。

注意:本函数只使用于文本文件的处理。当操作成功时,Flush返回0,否则,它将返回错误代码。当使用Rewrite过程或者Append过程打开一个文本文件用来输出时。Flush函数用于清空文件的缓冲区。这个过程保证了缓冲区的中的所有字符都已经写入外部文件中。对于因为输入而打开的文件,Flush函数不起任何作用。

1.7、Read过程

作用:用于从一个文件中读取数据。

原型:procedureRead(F,V1[,V2,...,Vn]);

procedureRead([varF:Text;]V1[,V2,...,Vn]);F:是一个文件变量。

V1……Vn:用于存储从文件中读取的数据。

注意:在Delphi中,Read过程有两种语法,如果参数F是一个有类型文件,过程Read读取一组数据到一个变量中。如果参数F是一个文本文件变量,过程Read读取一个或多个值到一个或多个变量中。1.8、ReadLn过程

作用:用于从文件中读取一行文本。

原型:procedureReadLn([varF:Text;]V1[,V2,...,Vn]);

V:文本文件变量。

V1……V2:用于存储读取的文本。

注意:在Delphi中,ReadLn过程用于读取文本文件的一行文本,并跳至该文本文件的下一行。1.9、Write过程

作用:用于向一个文本文件写入数据。

原型:procedureWrite([varF:Text;]P1[,P2,...,Pn]);件

procedureWrite(F,V1,…Vn);F:文本文件比变量。

P1……Pn:代表向文件中写入的数据。

注意:对于文本文件来说,写入的内容应String类型变量。对于有类型文件来说,写入的必须是某种特定类型的数据。1.10、WriteLn过程

作用:用来向文本文件中添加一行内容,即在写入内容后面有回车换行符。原型:procedureWriteLn([varF:Text;]P1[,P2,...,Pn]);

F:文本文件比变量。

1.11、Eof函数

//有类型文件//文本类型文

作用:用于判断是否到了文件的结尾。原型:functionEof(varF):Boolean;

//用于类型文件和无类型文件

//用于文本文件

functionEof[(varF:Text)]:Boolean;

典型应用:如果文件为空或当前位置在最后一个字符后,则返回True;否则,返回False。1.12、Eoln函数

作用:测试文件指针是否指向一行的最后,适用于文本文件。如果当前的位置在一行的末尾或Eof(F)函数返回的是True,则Eoln返回的是True;否则返回False。原型:functionEoln[(varF:Text)]:Boolean;

典型应用:在程序中对文本文件进行操作时,有时需要限制数据的读取。如果只读取一行中某个位置到一行结束的部分数据。程序中可以使用Eoln函数进行判断。1.13、CloseFile过程

作用:用来关闭文件,同事将文件记录盘上的文件与相关文件变量断开联系。原型:procedureCloseFile(varF);

F:一个文件类型变量

注意:通常来说,CloseFile过程与try…finally…模块结合使用。1.14、DeleteFile函数

作用:将一个文件从记录盘上删除。

原型:functionDeleteFile(constFileName:string):Boolean;注意:如果文件不存在或无法删除,返回False;否则,返回True。1.15、Erase过程

作用:用于删除一个已存在的文件。原型:procedureErase(varF);

注意:如果文件被打开,先关闭文件再执行删除操作。1.16、FileGetAttr函数

作用:用于获取一个文件的属性设置。

原型:functionFileGetAttr(constFileName:string):Integer;注意:具体返回值代码参考帮助。

下面我们来总结一下Delphi中文件操作流程。Delphi中把文件分为3种:文本文件、类型文件和无类型文件。文本文件指可以被任意文件编辑器读取的ASCII文件。类型文件包含由程序员定义的数据类型的文件。无类型文件包含了其他所有的文件类型。1、文本文件

Step1调用AssignFile()将文件变量与一个关联起来。如:

AssignFile(MyTextFile,’TextFile.txt’);

Step2打开文件。有三种打开文件的方式:1.Rewrite过程创建并打开文件,对于一个已经存在的文件,此操作将使文件被覆盖;2.使用Reset过程只读地打开一个文件;3.使用Append过程向已经存在的文本文件追加文本。Step3对文件进行操作。如Write或Read操作。Step4使用CloseFile来关闭一个已经打开的文件。下面是一个文本文件操作的示例。例1:

复制内容到剪贴板代码:

procedureTForm1.Button1Click(Sender:TObject);var

MyTextFile:TextFile;begin

(*步骤1,将文件变量与外部文件联系。相当于为外部文件找了个“替身”*)AssignFile(MyTextFile,‘TextFile.txt’);

(*判断操作的文件是否存在,不存在则创建文件。*)ifFileExists(‘TextFile.txt’)then

(*步骤2,打开文件,不过在打开前,最好进行文件是否存在的判断。*)

Append(MyTextFile)else

Rewrite(MyTextFile);try

(*步骤3,对文件进行操作。*)

//定义变量MyTextFile为文本文件类型

WrtieLn(MyTextFile,‘在文件末尾添加的文字!’);Flush(MyTextFile);finally

(*步骤4,关闭打开的文件,CloseFile常与try…finally搭配,用于回收资源*)CloseFile(MyTextFile);end;end;

//清空缓冲区,确保字符串已经写入文件之中。

2、类型文件

Step1定义数据结构

Step2调用AssignFile()将文件变量与一个类型文件关联起来。Step3打开类型文件。Step4对类型文件进行操作。Step5关闭已经打开的文件。下面例子演示了类型文件的操作。例2:

复制内容到剪贴板代码:

(*步骤1,定义数据结构。*)type

TPerson=record

Name:string[20];Sex:string[4]Age:Integer;End;

procedureTForm1.Button1Click(Sender:TObject);var

PersonFile:fileofTPerson;Person:TPerson;

//声明PersonFile变量为TPerson类型文件

begin

(*步骤2,关联文件。*)

AssignFile(PersonFile,‘Person.dat’);(*步骤3,打开文件。*)Reset(PersonFile);try

WhilenotEof(PersonFile)do(*步骤4,对文件进行操作。*)

begin

Read(PersonFile,Person);Memo1.Lines.Add(Person.Name);Memo1.Lines.Add(Person.Sex);

Memo1.Lines.Add(IntToStr(Person.Age));end;finally

(*步骤5,关闭文件。*)CloseFile(PersonFile);end;end;

=====================================================================

Delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用.但:input:只读output:只写

用时注意以免引起异常.

引自http://www.zxbc.cn/html/delphijc/2206462260151.html

文件是由文件名标识的一组数据的集合,文件通常存放在磁盘上。源程序、学生档案记录、图形、音乐等均可以作为文件存储在磁盘上。操作系统是以文件

为单位对数据进行管理的,也就是说,如果想读取外存介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外存介质上存储数据,也必须先建立一个文件(以文件名标识),才能向它输出数据。

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

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

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

2.1文本文件的概念

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

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

2.2文本文件变量的定义定义文件变量的语法格式如下:var<文件变量名>:TextFile;

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

2.3文本文件的使用(1)文件变量与文件关联

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

法格式如下:

procedureAssignFile(VarF;FileName:string);

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

AssignFile(F,'e:\\delphi\\program\\extl.txt’);就将文件变量F和指定的文件e:\\delphi\\program\\extl.txt关联起来。后面所有对变量f的操作都是对指定文件的操作。

(2)使用文件变量打开文件

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

procedureRewrite(varF~File[;recsize:word]);

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

procedureReset(varF:File[;RecSize:Word]);

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

procedure.Append(varF:’Fext);

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

(3)读/写文件

①读取文件内容。在以读的方式打开文件后,可以使用read和readln语句来读取文件内容,其声明代码格式分别为:

procedureread([varF:’Fext;]V1[,V2,…,Vn]);procedurereadln([varF:’text;]v1[,V2,···,Vn]);

其中,F为文件变量。v1、v2、…、vn等为需要输入的变量,其类型可以为字

符串、字符、整数和实数类型。read和readln的区别为后者在读取数据后,将文件指针移至下一行,上次读取的数据与回车符之间的数据被忽略。

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

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

functionEof[(‘varF:’rext)]:Boolean;当文件指针指到尾部时,该函数返回值为true。

②向文件写入数据。以写的方式打开文件后,即可向其中写入数据,写人数据使用write和writeln过程,其声明代码如下:

procedurewri‘teln([varF:’rext;]p1[,p2,…,pn]);procedurewrite([varF:‘rext;]p1[,p2,‘·‘,pn]);

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

写人数据时系统自动将数据转化为字符串形式,1)~ASCII码的形式保存在文件中。

(4)使用文件变量关闭文件

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

procedureCloseFile(varF);

关闭文件后,系统释放打开文件时使用的资源。特别是写文件时,在调用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);fori:=1to5do1

//创建文件或打开已存在的文件进行覆盖

begin

S:=’ThisisLine#’;writeln(textf,s,i);end;

CloseFile(textf);end.

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

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

F:Textfile;//申明变量Begin

AssignFile(F,'c:\\ek.txt');//让变量F和C:\\ek.txt关连ReWrite(F);{Createanewfilenamedek.txt}Writeln(F,'你要写入文本文件的内容');//写入文件Closefile(F);//释放变量FEnd;读取文件

//关闭已打开的文件textf

Var

F:Textfile;str:String;Begin

AssignFile(F,'c:\\ek.txt');Reset(F);Readln(F,str);

ShowMessage('1.lineoftextfile:'+str);Closefile(F);End;下面转自

http://blog.csdn.net/xwchen/archive/2007/07/26/1710410.aspxvarf:text;...

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

Writeln(f,'Thisisatest');CloseFile(f);...

其中Rewrite是新建文件,若换成Reset则为打开文件

Writeln为行写入并换行,Write为写入不换行,Readln为读一行并换行,Read为读但不换行

{ClosesfileF}

{AssignstheFilename}{Opensthefileforreading}

delphi读写文件方法有很多种:我送你一贴:

程序设计当中我们时常遇到需要处理文件、目录及驱动器的情况,本章将对如何处理不同类型的文件进行讲述。本章包括如何使用TFileStream类封装文件的输入/输出以及如何利用32位Windows的主要特征—内存映射文件。你将学习到如何创建一个封装了内存映射文件功能的TMemoryM

appedFile类,并用它在文本文件中进行文本查询。本章还提供了一些关于选择驱动器、在树型目录中查询文件及获取文件版本信息的方法。本章将使你对文件、目录及驱动器有深入的认识。处理文件的输入/输出

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

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

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

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

注意Reset()将以可读写方式打开类型文件和无类型文件。可以使用CloseFile()来关闭一个已打开的文件。下例是各种调用的函数。文件的打开与关闭

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

:打开一个存在的文件

Rewrite:创建并打开一个新文件(或覆盖原有文件)Append:以添加方式打开一个文件(只适用于文本文件)CloseFileFileOpenFileCreateFileClose

:关闭一个打开的文件

:打开一个特定的文件并返回文件句柄:创建一个给定文件名的文件并返回文件句柄:关闭一个特定句柄的文件

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

Seek:把文件当前位置移到指定部分FilePos:返回文件的当前位置Eoln:返回行结束标志EOF:返回文件结束标志FileSeek:

改变当前文件指针的位置

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

正常情况下是这样

用TFileStream

对于通过Byte数组进行文件操作的,在FTP中经常会使用到,我也是在Delphi调用WebService进行文件的上传和下载时找到这两个函数的,挺好用的,推荐给大家。(申明:非本人所写)1.将Byte数组生成文件

procedureByteArrayToFile(constByteArray:TByteDynArray;constFileName:string);var

Count:integer;F:FIleofByte;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数组

functionFiIeToByteArray(constFileName:string):TByteDynArray;const

BLOCK_SIZE=1024;var

BytesRead,BytesToWrite,Count:integer;F:FileofByte;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)dobegin

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;

functionEncrypt(mStr:string;mKey:string):string;var

I,J:Integer;beginJ:=1;Result:='';

forI:=1toLength(mStr)dobegin

Result:=Result+Char(Ord(mStr[I])xorOrd(mKey[J]));ifJ+1<=Length(mKey)thenInc(J)elseJ:=1;end;{自己加步骤}end;

functionDecrypt(mStr:string;mKey:string):string;var

I,J:Integer;beginJ:=1;Result:='';{自己加步骤}

forI:=1toLength(mStr)dobegin

Result:=Result+Char(Ord(mStr[I])xorOrd(mKey[J]));ifJ+1<=Length(mKey)then

Inc(J)elseJ:=1;end;end;

procedureTForm1.Button1Click(Sender:TObject);const

cKey1='谁想试试怎么破';

cKey2='我可不愿意这样玩(1)我可不愿意这样玩(2)我可不愿意这样玩(3)';

cKey3='Memo2.Text:=Decrypt(Encrypt(Memo1.Text,cKey),cKey);';var

S:string;//加密后的字符begin

S:=Encrypt(Encrypt(Encrypt(Memo1.Text,cKey1),cKey2),cKey3);ShowMessage(S);

Memo2.Text:=Decrypt(Decrypt(Decrypt(S,cKey3),cKey2),cKey1);end;

Delphi关于记录文件的操作本例子几个变量的说明TFileRec=recordDay:Integer;...//其他定义end;f:FileofTFileRec;//标准的输入/输出文件FilRec:TFileRec;//记录数据FileName;//记录文件的名称关于记录文件的相关操作(1)记录文件的打开(2)记录文件的读入和显示(3)记录的增加//记录定义(4)记录的删除(5)记录的修改(6)记录文件的删除1、记录文件的打开需要使用的方法:AssingFile(f,FileName):Reset(f)://打开一个已经存在的记录文件Rewrite(f);//新创建一个记录文件FileSize(f);//返回记录文件记录个数procedureOpenRecFile(constFileName:string;varf:TFileRec);beginAssingFile(f,FileName):tryReset(f);except//打开文件出现异常的处理OnEInOutErrordobegintryifFileExists(FileName)=Falsethen//如果文件不存在,创建ReWrite(MethodFile);else//文件存在,但是打不开,表示这个文件有问题MessageDlg('文件不能打开',mtWarning,[mbOK],0);except//创建新文件的时候出现异常的处理OnEInOutErrordoMessageDlg('文件不能创建',mtWarning,[mbOK],0);end;end;end;2、记录文件的读入需要使用的方法Read(f,FileRec);procedureReadData_FromRecFile;beginfori:=1toFileSize(f)dobeginRead(f,FileRec);...//其他的处理(比如记录的显示等等)end;end;3、记录的增加需要使用的方法Seek(f,RecNo);//RecNo代表要定位置的记录编号Write(f,FileRec)基本思路:获取指定记录的位置,并把该位置后的记录逐个向后移动(1)在文件的尾部增加记录procedureInsertData_AtRecFile_Last(constData:TFileRec);//需要插入的数据beginSeek(f,FileSize(f));Write(f,Data);end;(2)在文件的指定位置前增加记录procedureInsertData_AtRecFile(constIndex:Integer);//索引号constData:TFileRec;//需要插入的数据varnI:Integer;beginif(Index>FileSize(f))or(Index<0)thenExit;fornI:=FileSize(f)-1downtoIndexdobeginseek(f,nI);read(f,FileRec);Seek(f,nI+1);Write(f,FileRec);end;Seek(f,Index);Write(f,Data);end;4、记录的删除需要使用的方法Seek(f,Index);//Index代表要定位置的记录编号Write(f,FileRec)Truncate(f)//删除指定索引号之后的索引文件基本思路:获取指定位置,并把该位置后的记录逐个向前移动。文件在最后一条记录前截断。(1)删除指定索引号的记录procedureDeleteData_FromRecFile(constIndex:Integer);varnI:Integer;beginif(Index<0)or(FileSize(f)=0)thenExit;fornI:=Index+1toFileSize(f)-1dobeginseek(f,nI);read(f,FileRec);seek(f,nI-1);Write(f,FileRec);end;Seek(f,FileSize(f)-1);//截断最后一条记录Truncate(f);end;5、记录的修改procedureModifyData_AtRecFile(constIndex:Integer;constData:TFileRec);beginif(Index<0)or(FileSize(f)=0)or(Index>FileSize(f)-1)thenExit;Seek(f,Index);Write(f,Data);end;6、记录文件的关闭CloseFile(f);Delphi的文件操作文件是同一类型元素的有序集合,是内存与外设间传输数据的渠道。一些外设如显示器、键盘、打印机等都可以看作文件,但最常用的还是磁盘文件,这也是我们主要讨论的对象。Delphi继承了ObjectPascal的文件管理功能,并有很大的发展,其中最主要的是提供了用于文件管理的标准控件,同时也提供了更多的文件管理函数。利用Delphi的强大功能,开发一个自己的文件管理系统就成为很容易的事。首先介绍Delphi文件管理的基本概念和标准过程/函数,并提供了一个记录文件的应用实例,这是从我们实际课题开发中提取出来的。而后介绍Delphi提供的文件控件的使用方法。最后提供的一个综合例程MDI文件管理器则是对Delphi文件管理功能的综合应用。1文件类型和标准过程Delphi同ObjectPascal一样支持三种文件类型,即:文本文件、记录文件、无类型文件。1.1文本文件文本文件类型的变量用如下方法声明:varTextFileVar:Text;文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。而且文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。1.1.1文本文件的打开、关闭文本文件的打开需要两个步骤:(1).文件变量与文件名关联;(2).初始化读写。联文件变量与文件名调用AssignFile标准过程:AssignFile(TextFileVar,FileName);FileName既可以是全路径名,也可以仅是文件名。对于后者系统将在当前目录下查找。AssignFile是Delphi新提供的一个函数,其功能等价于ObjectPascal中的Assign。而Assign在Delphi中更多地被用作一个方法名。初始化读写有三种方式:1.Reset:为读打开文件并把文件指针移动到文件首;2.Rewrite:为写创建一个新文件;3.Append:为写打开存在的文件并把文件指针定位在文件尾。当使用Reset或Append过程而文件不存在时将会引发一个I/O异常。文件的关闭很简单,只须调用CloseFile过程即可。虽然Delphi应用程序在退出时会自动关闭所有打开的文件,但自己动手关闭文件可以确保释放文件句柄,并使程序的可移植性增强。为保持兼容,Delphi也允许用户用Assign建立关联,Close关闭文件。1.1.2文本文件的读写从文本文件中读取信息用Read、Readln两个标准过程。当读入数值时,Read、Readln假定数值是用一个或多个空格分开的,而不是逗号、分号或其它字符。对如下一条语句:Read(TextFileVar,Num1,Num2,Num3);如果文件中的数值是:100200300则能够成功读入,而若文件中的数值是100200,300则Read读入“200,”并试图把它转化成一个数值时会引发一个异常。当读入字符是字符串时,Read、Readln过程总是读取尽可能多的字符填充到字符串变量中或一直读到行结束符为止。因此从文本文件中读取格式化的字符串数据,必须声明与其长度相匹配的字符串变量。如果要从文件中读取单词,必须先把文件中的每一行读入字符串,然后再从字符串中逐个分析出单词。或者一次只从文本文件中读入一个字符并测试每个字符后是否是单词断开处。格式化字符串之间的分隔符应读入到一个临时变量中,而字符串与数值、数值与数值间的分隔符读入时会自动识别剔除。对如下一行数据:Mon12:104050定义varDay:string[3];Time:string[5];Num1,Num2:Integer;则须用如下的read语句读入:read(TextFileVar,Day,c,Time,Num1,Num2);C为一个临时字符变量。1.1.3文本文件的编辑在Delphi中实现对一个文本文件的编辑,只须让其与一个Tmemo控件建立关联即可:Memo1.Lines.LoadFromFile(TextFileName);这样在TMemo上所做的一切修改当调用Memo部件的SaveToFile方法后都会反映到文件中去。1.2记录文件记录文件是一种操作更为灵活的文件类型。它允许同时为读和写打开,而且由于记录文件中每条记录的长度固定,所以可随机存取。记录文件的类型变量可如下声明:varRecordFileVar:fileofRecordType;RecordType是一个自定义的记录类型。1.3无类型文件无类型文件提供了底层的I/O通道,可用于存取可变长度记录的文件。经常用于文件的复制操作中。由于Delphi提供了更好的方法,所以无类型文件很少使用。有兴趣的读者可参看BlockRead、BlockWrite两个联机帮助主题。1.4Delphi的文件管理标准过程根据功能我们把标准过程划分为十一类进行介绍。1.4.1文件的打开与关闭AssignFile:把一个外部文件名和一个文件变量相关联Reset:打开一个存在的文件Rewrite:创建并打开一个新文件(或覆盖原有文件)Append:以添加方式打开一个文件(只适用于文本文件)CloseFile:关闭一个打开的文件FileOpen:打开一个特定的文件并返回文件句柄FileCreate:创建一个给定文件名的文件并返回文件句柄FileClose:关闭一Append:以添加方式打开一个文件(只适用于文本文件)CloseFile:关闭一个打开的文件FileOpen:打开一个特定的文件并返回文件句柄FileCreate:创建一个给定文件名的文件并返回文件句柄FileClose:关闭一个特定句柄的文件后边三个文件主要供系统内部使用,在文件复制的编程中也往往会用到。它们操作的对象是文件句柄而不是文件变量。1.4.2文件定位Seek:把文件当前位置移到指定部分FilePos:返回文件的当前位置Eoln:返回行结束标志EOF:返回文件结束标志FileSeek:改变当前文件指针的位置Seek与FileSeek的区别是:1.Seek仅用于记录文件;2.FileSeek的参数是文件句柄、偏移量、起始位置。其中起始位置有文件首、当前位置、文件尾三种选择。Seek的参数是文件变量、偏移量,偏移量是从文件首开始定位的。3.FileSeek的偏移量以字节数来计算,而Seek是根据记录号进行移动。Seek、FilePos仅用于记录文件。但任何文件都可以看作是基于字节的记录文件。下面一段程序表示了它们的用法。{该例子的设计界面为一个包含TOpenDialog部件的窗体。}程序代码usesDialogs;varf:fileofByte;size:Longint;S:String;y:Integer;beginifOpenDialog1.ExecutethenbeginAssignFile(f,OpenDialog1.FileName);Reset(f);size:=FileSize(f);S:='Filesizeinbytes:'+IntToStr(size);y:=10;Canvas.TextOut(5,y,S);y:=y+Canvas.TextHeight(S)+5;S:='Seekinghalfwayintofile...';Canvas.TextOut(5,y,S);y:=y+Canvas.TextHeight(S)+5;Seek(f,sizediv2);S:='Positionisnow'+IntToStr(FilePos(f));Canvas.TextOut(5,y,S);CloseFile(f);end;end.1.4.3文件删除与截断Erase:删除一个存在的文件DeleteFile:删除一个文件Truncate:从文件当前位置将文件截断Erase与DeleteFile的区别是:Erase以文件变量为参数,当文件不能删除时引起一个异常;DeleteFile以文件名为参数,当文件不存在或不能删除时返回False,而并不引起一个异常。1.4.4文件名操作Rename:文件更名,以文件变量为操作对象RenameFile:文件更名,参数为文件的原名和新名ChangeFileExt:改变文件扩展名ExpandFileName:返回文件全路径名ExtractFileExt:返回文件扩展名ExtractFileName:从全路径名中返回文件名ExtractFilePath:返回特定文件的路径1.4.5文件属性FileGetAttr:返回文件属性FileSetAttr:设置文件属性1.4.6文件状态FileSize:返回文件对象大小IOResult:返回上一次I/O操作的状态FileExists:检测文件是否存在1.4.7文件日期DateTimeToFileDate:把Delphi日期格式转换为DOS日期格式FileDateToDateTime:把DOS日期格式转换为Delphi日期格式FileGetDate:返回文件的DOS日期时间戳FileSetDate:设置文件的DOS日期时间戳1.4.8文件读写Read,Readln:从文本或记录文件中读取变量Write:将指定变量写入文本或记录文件Writeln:将指定变量写入文本文件并写入一个行结束标志FileRead:从一个指定文件中读取变量FileWrite:向指定文件写入数据FileRead和FileWrite都是以文件句柄为操作对象,主要供系统内部使用。1.4.9目录操作MkDir:创建当前目录的子目录ChDir:改变当前目录GetDir:返回特定磁盘的当前目录RmDir:删除一个空子目录1.4.10磁盘操作DiskFree:返回磁盘自由空间DiskSize:返回特定磁盘的大小1.4.11文件查找FileSearch:查找目录中是否存在某一特定文件FindFirst:在目录中查找与给定文件名(可以包含匹配符)及属性集相匹配的第一个文件FindNext:返回符合条件的下一个文件FindClose:中止一个FindFirst/FindNext序列有关文件管理标准过程/函数的更详细资料,请查阅Delphi相关的Help主题。以上的大部分过程在后面都有应用实例,可以从中体会其用法。在Delphi的联机帮助Help系统中把有关文件的过程/函数分为两个主题:I/ORoutine和File_ManagementRoutine。前者大部分以文件变量为操作对象,而后者大部分以文件名或文件句柄为操作对象。这里为了方便使用,我们按功能重新进行了分类。在下一节中主要应用I/ORoutine主题下的过程,而在第四节的综合举例中主要应用File_ManagementRoutine主题下的过程。另外,Windows提供了许多有关文件管理的API函数。虽然在一般情况下,利用Delphi提供的函数已足够解决问题,但有时候仍然需要使用WindowsAPI。关于文件、目录操作FileExists('c:\est.txt')Deletfile('abc.txt');//删除文件Renamefile('old.txt','new.txt');//文件更名Delphi中如何改目录的名字RenameFile('c:','c:');ChangeFileExt(Application.ExeName,'.LOG')//修改文件扩展名ExtractFilename(filelistbox1.filename);//取文件名ExtractFileExt(filelistbox1.filename);//取文件后缀ExtractFilePathExtractRelativePath//取相对路径ExtractShortPathName//转化长文件名为短文件名ExpandFileName合并文件名DirectoryExists('c:\\')Chdir('c:\\abcdir');转到目录Mkdir('dirname');建立目录ForceDirectories('e:\est\est\est');创建多级目录Rmdir('dirname');删除目录RemoveDir('c:\est')GetCurrentDir;//取当前目录名,无'\\'SetCurrentDir('c:\\111');Getdir(0,s);//取工作目录名s:='c:\\abcdir';SelectDirectory()ExtractFileDriver//取驱动器号ExtractFileDir(Application.Exename);//得到程序的路径SysUtils单元中有ExtractFileDir与ExtractFilePath两个类似的函数,用哪一个?没有太大的关系。不过有以下的差别:ExtractFilePath传回值的最後一个字元是反斜杠\"/\"。文本文件varmyTextFile:TextFile;s:string;beginAssignFile(myTextFile,'MyTextFile.txt');reset(myTextFile);trywhileNot(Eof(myTextFile))dobeginReadLn(myTextFile,s);ShowMessage(s);end;finallyCloseFile(myTextFile);end;end;这时,可以进行第二步;打开文件。有三种方式可以打开文件:使用Rewite过程创建并打开文件;对于一个已存在的文件,此操作将使文件被覆盖;使用Reset过程只读地打开一个文件:使用Append过程可以向已存在的文件追加文本。注意Reset将以可读写方式打开类型文件和无类型文件。类型文件TPerson=packedrecordFirstName:string[20];LastName:string[20];Age:integer;SocialCode:integer;end;varPersonFile:fileofTPerson;Person:TPerson;beginassignfile(PersonFile,'PersonFile.dat');reset(PersonFile);tryifnotEof(PersonFile)thenread(PersonFile,Person);finallyCloseFile(PersonFile);end;end;追加记录varPersonFile:fileofTPerson;Person:TPerson;beginassignfile(PersonFIle,'PersonFile.dat');reset(PersonFile);seek(PersonFIle,FileSize(PersonFile));trywrite(PersonFile,Person);finallyCloseFile(PersonFile);end;end;无类型文件varUnTypedFile:file;Buf:array[0..128]ofbyte;Num:integer;beginassignfile(UnTypedFile,'UnTypedFile.dat');reset(UnTypedFile);tryBlockRead(UnTypedFile,Buf,Num);finallyCloseFile(UnTypedFile);end;end;写入文件varUnTypedFile:file;Buf:array[0..128];Num:integer;beginassignfile(UntypedFile);reset(UnTypedFile);ifFileExists('UnTypedFile.dat')thenReset(UnTypedFile);elseRewrite(UnTypedFile);trySeek(UnTypedFile,FileSize(UnTypedFile));FillChar(Buf,SizeOf(buf),'Y');BlockWrite(UnTypedFile,Buf,1,Num);finallyCloseFile(UnTypedFile);end;end;TFileStream的操作//从文件流当前位置读count字节到缓冲区BUFFERfunctionread(varbuffer;count:longint):longint;override;//将缓冲区BUFFER读到文件流中functionwrite(constbuffer;count:longint):longint;override;//设置文件流当前读写指针为OFFSETfunctionseek(offset:longint;origin:word):longint;override;origin={soFromBeginning,soFromCurrent,soFromEnd}//从另一文件流中当前位置复制COUNT到当前文件流当前位置functioncopyfrom(source:TStream;count:longint):longint;//读指定文件到文件流varmyFStream:TFileStream;beginmyFStream:=TFileStream.create(OpenDialog1.filename,fmOpenRead);end;处理文件属性attr:=filegetattr(filelistbox1.filename);if(attrandfaReadonly)=faReadonlythen...//只读if(attrandfaSysfile)=faSysfilethen...//系统if(attrandfaArchive)=faArchivethen...//存档if(attrandfaHidden)=faHiddenthen...//隐藏取得WINDOWS目录usesshellapi;varwindir:array[0..255]ofchar;getwindowsdirectory(windir,sizeof(windir));或者从注册表中读取,位置:HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersionSystemRoot键,取得如:C:\\WINDOWS得到WINDOWS的SYSTEM路径:方法:varMySysPath:PCHAR;beginGetMem(MySysPath,255);GetSystemDirectory(MySysPath,255);FreeMem(MySysPath,0);end;注:MySysPath为SYSTEM路径如何取得Windows的临时文件目录?Windows95&NT都指定了放置临时文件的目录,然而,用户能改变临时目录的位置而不使用缺省的目录。这篇文章的目的是告诉你如何得到Windows95&NT当前的临时目录位置。这个WindowsAPI函数GetTempPath就是解决这个问题的。其函数原形为:DWORDGetTempPath(DWORDnBufferLength,LPTSTRlpBuffer);下面的例子示范如何使用:functionGetTempDirectory:String;varTempDir:array[0..255]ofChar;beginGetTempPath(255,@TempDir);Result:=StrPas(TempDir);end;备注:临时目录的确定原则:1,如果有TMP环境变量则临时目录为TMP指定的目录2,如果没有TMP环境变量而有TEMP环境变量,则为TEMP变量指定的目录3,如果TMP和TEMP都没有定义,则取当前目录为临时目录得到执行程序的目录procedureTForm1.Button1Click(Sender:TObject);beginShowMessage(ExtractFileDir(Application.Exename));//ie:c:ShowMessage(ExtractFilePath(Application.Exename));//ie:c:\\parend;相同点:如果执行文件在根目录下(如:C:.EXE)的话,两者的传回值相同,且最后一个字符都是\"/\"。使用GetFileVersionInfo得到版本信息的例子procedureGetBuildInfo(varV1,V2,V3,V4:Word);varVerInfoSize:DWORD;VerInfo:Pointer;VerValueSize:DWORD;VerValue:PVSFixedFileInfo;Dummy:DWORD;beginVerInfoSize:=GetFileVersionInfoSize(PChar(ParamStr(0)),Dummy);GetMem(VerInfo,VerInfoSize);GetFileVersionInfo(PChar(ParamStr(0)),0,VerInfoSize,VerInfo);VerQueryValue(VerInfo,',Pointer(VerValue),VerValueSize);withVerValue^dobeginV1:=dwFileVersionMSshr16;V2:=dwFileVersionMSand$FFFF;V3:=dwFileVersionLSshr16;V4:=dwFileVersionLSand$FFFF;end;FreeMem(VerInfo,VerInfoSize);end;计算一个目录的大小functionGetDirectorySize(constADirectory:string):Integer;varDir:TSearchRec;Ret:integer;Path:string;beginResult:=0;Path:=ExtractFilePath(ADirectory);Ret:=Sysutils.FindFirst(ADirectory,faAnyFile,Dir);ifRet<>NO_ERRORthenexit;trywhileret=NO_ERRORdobegininc(Result,Dir.Size);//如果是目录,且不是'.'或'..'则进行递归调用if(Dir.Attrin[faDirectory])and(Dir.Name[1]<>'.')thenInc(Result,GetDirectorySize(Path+Dir.Name+'\\*.*'));Ret:=Sysutils.FindNext(Dir);end;finallySysutils.FindClose(Dir);end;end;清空一个目录functionEmptyDirectory(TheDirectory:String;Recursive:Boolean):Boolean;varSearchRec:TSearchRec;Res:Integer;beginResult:=False;TheDirectory:=NormalDir(TheDirectory);Res:=FindFirst(TheDirectory+'*.*',faAnyFile,SearchRec);trywhileRes=0dobeginif(SearchRec.Name<>'.')and(SearchRec.Name<>'..')thenbeginif((SearchRec.AttrandfaDirectory)>0)andRecursivethenbeginEmptyDirectory(TheDirectory+SearchRec.Name,True);RemoveDirectory(PChar(TheDirectory+SearchRec.Name));endelsebeginDeleteFile(PChar(TheDirectory+SearchRec.Name))end;end;Res:=FindNext(SearchRec);end;Result:=True;finallyFindClose(SearchRec.FindHandle);end;end;使用readln()从文件中读出超过255字符的字串Type{uselongestlineyoumayencounterhere}TLine=Array[0..1024]ofChar;PLine=^TLine;VarpBuf:PLine;...New(pBuf);...ReadLn(F,pBuf^);向文本文件后追加一行varfilevar:textfile;buf:string;beginassignfile(filevar,'txt.log');append(filevar);writeln(filevar,buf);closefile(filevar);end;-------------------------------------------------------------------------------------------------------------------unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,FileCtrl,System.ComponentModel,system.Text;typeTForm1=class(TForm)Button1:TButton;Button2:TButton;Button3:TButton;Button4:TButton;Button5:TButton;Button6:TButton;Button7:TButton;Button8:TButton;procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton4Click(Sender:TObject);procedureButton5Click(Sender:TObject);procedureButton6Click(Sender:TObject);procedureButton7Click(Sender:TObject);procedureButton8Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm1:TForm1;implementation{$R*.dfm}procedureTForm1.Button1Click(Sender:TObject);constSELDIRHELP=1000;varDir:string;beginDir:='C:\\';ifSelectDirectory(Dir,[sdAllowCreate,sdPerformCreate,SELDIRHELP)thenCaption:=Dir;end;procedureTForm1.Button2Click(Sender:TObject);beginCaption:=ExtractFilePath(Application.ExeName);ShowMessage(ExtractFileDir(Application.ExeName));end;procedureTForm1.Button3Click(Sender:TObject);varaa:stringbuilder;beginaa:=stringbuilder.Create(255);sdPrompt],GetTempPath(255,aa);Caption:=aa.ToString;aa.Free;end;procedureTForm1.Button4Click(Sender:TObjectvarMySysPath:StringBuilder;beginMySysPath:=stringbuilder.Create(255);GetSystemDirectory(MySysPath,255);Caption:=MySysPath.ToString;MySysPath.Free;end;procedureTForm1.Button5Click(Sender:TObjectvarMySysPath:StringBuilder;beginMySysPath:=stringbuilder.Create(255);GetWindowsDirectory(MySysPath,255);Caption:=MySysPath.ToString;MySysPath.Free;end;procedureTForm1.Button6Click(Sender:TObjectvarDir:string;beginDir:='C:\\Test\\111\\222';ifForceDirectories(Dir)thenCaption:=Dir+'wascreated'end;procedureTForm1.Button7Click(Sender:TObjectvardir,tmpstr:String;begindir:='c:\\TempTest';MkDir(dir);RenameFile(dir,dir+'tmp');ChDir(dir+'tmp');GetDir(3,tmpstr);Caption:=tmpstr;chdir('\\');removedir(tmpstr);SetCurrentDir(tmpstr);ShowMessage(getCurrentDir);););););end;procedureTForm1.Button8Click(Sender:TObject);beginifnotDirectoryExists('c:\emp')thenifnotCreateDir('C:\emp')thenraiseException.Create('Cannotcreatec:\emp');end;end.Delphi文件操作所涉及的一些函数//判断文件是否存在FileExists//判断文件夹是否存在DirectoryExists//删除文件DeleteFile;Windows.DeleteFile//删除文件夹RemoveDir;RemoveDirectory//获取当前文件夹GetCurrentDir//设置当前文件夹SetCurrentDir;ChDir;SetCurrentDirectory//获取指定驱动器的当前路径名GetDir//文件改名RenameFile//建立文件夹CreateDir;CreateDirectory;ForceDirectories//删除空文件夹RemoveDir;RemoveDirectory//建立新文件FileCreate//获取当前文件的版本号GetFileVersion//获取磁盘空间DiskSize;DiskFree//搜索文件FindFirst;FindNext;FindClose//读取与设置文件属性FileGetAttr;FileSetAttr//获取文件的创建时间FileAge;FileDateToDateTimeDelphi代码//判断文件是否存在FileExistsvarf:string;beginf:='c:\"temp\"test.txt';ifnotFileExists(f)thenbegin//如果文件不存在end;end;--------------------------------------------------------------------------------//判断文件夹是否存在DirectoryExistsvardir:string;begindir:='c:\"temp';ifnotDirectoryExists(dir)thenbegin//如果文件夹不存在end;end;--------------------------------------------------------------------------------//删除文件DeleteFile;Windows.DeleteFilevarf:string;beginf:='c:\"temp\"test.txt';//DeleteFile(f);//返回Boolean//或者用系统API:Windows.DeleteFile(PChar(f));//返回Booleanend;--------------------------------------------------------------------------------//删除文件夹RemoveDir;RemoveDirectoryvardir:string;begindir:='c:\"temp';RemoveDir(dir);//返回Boolean//或者用系统API:RemoveDirectory(PChar(dir));//返回Booleanend;--------------------------------------------------------------------------------//获取当前文件夹GetCurrentDirvardir:string;begindir:=GetCurrentDir;ShowMessage(dir);//C:\"Projectsend;--------------------------------------------------------------------------------//设置当前文件夹SetCurrentDir;ChDir;SetCurrentDirectoryvardir:string;begindir:='c:\"temp';ifSetCurrentDir(dir)thenShowMessage(GetCurrentDir);//c:\"temp//或者ChDir(dir);//无返回值//也可以使用API:SetCurrentDirectory(PChar(Dir));//返回Booleanend;--------------------------------------------------------------------------------//获取指定驱动器的当前路径名GetDirvardir:string;b:Byte;beginb:=0;GetDir(b,dir);ShowMessage(dir);////第一个参数:1、2、3、4...分别对应:A、B、C、D...//0是缺省驱动器end;--------------------------------------------------------------------------------//文件改名RenameFilevarOldName,NewName:string;beginOldName:='c:\"temp\"Old.txt';NewName:='c:\"temp\"New.txt';ifRenameFile(OldName,NewName)thenShowMessage('改名成功!');//也可以:SetCurrentDir('c:\"temp');OldName:='Old.txt';NewName:='New.txt';ifRenameFile(OldName,NewName)thenShowMessage('改名成功!');//也可以:SetCurrentDir('c:\"temp');OldName:='Old.txt';NewName:='New.txt';ifRenameFile(OldName,NewName)thenShowMessage('改名成功!');end;--------------------------------------------------------------------------------//建立文件夹CreateDir;CreateDirectory;ForceDirectoriesvardir:string;begindir:='c:\"temp\"delphi';ifnotDirectoryExists(dir)thenCreateDir(dir);//返回Boolean//也可以直接用API:CreateDirectory(PChar(dir),nil);//返回Boolean//如果缺少上层目录将自动补齐:dir:='c:\"temp\"CodeGear\"Delphi\"2007\"万一';ForceDirectories(dir);//返回Booleanend;--------------------------------------------------------------------------------//删除空文件夹RemoveDir;RemoveDirectoryvardir:string;begindir:='c:\"temp\"delphi';RemoveDir(dir);//返回Boolean//也可以直接用API:RemoveDirectory(PChar(dir));//返回Booleanend;--------------------------------------------------------------------------------//建立新文件FileCreatevarFileName:string;i:Integer;beginFileName:='c:\"temp\"test.dat';i:=FileCreate(FileName);ifi>0thenShowMessage('新文件的句柄是:'+IntToStr(i))elseShowMessage('创建失败!');end;--------------------------------------------------------------------------------//获取当前文件的版本号GetFileVersionvars:string;i:Integer;begins:='C:\"WINDOWS\"notepad.exe';i:=GetFileVersion(s);//如果没有版本号返回-1ShowMessage(IntToStr(i));//327681这是当前记事本的版本号(还应该再转换一下)end;--------------------------------------------------------------------------------//获取磁盘空间DiskSize;DiskFreevarr:Real;s:string;beginr:=DiskSize(3);//获取C:总空间,单位是字节r:=r/1024/1024/1024;Str(r:0:2,s);//格式为保留两位小数的字符串s:='C盘总空间是:'+s+'GB';ShowMessage(s);//xx.xxGBr:=DiskFree(3);//获取C:可用空间r:=r/1024/1024/1024;Str(r:0:2,s);s:='C盘可用空间是:'+s+'GB';ShowMessage(s);//xx.xxGBend;//查找一个文件FileSearchvarFileName,Dir,s:string;beginFileName:='notepad.exe';Dir:='c:\"windows';s:=FileSearch(FileName,Dir);ifs<>''thenShowMessage(s)//c:\"windows\"notepad.exeelseShowMessage('没找到');end;--------------------------------------------------------------------------------//搜索文件FindFirst;FindNext;FindClosevarsr:TSearchRec;Attr:Integer;s:string;//定义TSearchRec结构变量//文件属性//要搜索的内容List:TStringList;//存放搜索结果begins:='c:\"windows\"*.txt';Attr:=faAnyFile;List:=TStringList.Create;//文件属性值faAnyFile表示是所有文件//List建立ifFindFirst(s,Attr,sr)=0then//开始搜索,并给sr赋予信息,返回0表示找到第一个beginrepeatList.Add(sr.Name);until(FindNext(sr)<>0);找到end;FindClose(sr);//需要结束搜索,搜索是内含句柄的//如果有第一个就继续找//用List记下结果//因为sr已经有了搜索信息,FindNext只要这一个参数,返回0表示ShowMessage(List.Text);List.Free;//显示搜索结果//释放List//更多注释://TSearchRec结构是内涵文件大小、名称、属性与时间等信息//TSearchRec中的属性是一个整数值,可能的值有://faReadOnly1//faHidden//faSysFile24只读文件隐藏文件系统文件卷标文件//faVolumeID8//faDirectory16目录文件//faArchive32归档文件//faSymLink//faAnyFile64链接文件63任意文件//s的值也可以使用?通配符,好像只支持7个?,如果没有条件就是*,譬如:C:\"*//实际使用中还应该在repeat中提些条件,譬如判断如果是文件夹就递归搜索等等end;--------------------------------------------------------------------------------//读取与设置文件属性FileGetAttr;FileSetAttrvarFileName:string;Attr:Integer;//属性值是一个整数beginFileName:='c:\"temp\"Test.txt';Attr:=FileGetAttr(FileName);ShowMessage(IntToStr(Attr));//32,存档文件//设置为隐藏和只读文件:Attr:=FILE_ATTRIBUTE_READONLYorFILE_ATTRIBUTE_HIDDEN;ifFileSetAttr(FileName,Attr)=0then//返回0表示成功ShowMessage('设置成功!');//属性可选值(有些用不着)://FILE_ATTRIBUTE_READONLY=1;只读//FILE_ATTRIBUTE_HIDDEN=2;隐藏//FILE_ATTRIBUTE_SYSTEM=4;系统//FILE_ATTRIBUTE_DIRECTORY=16//FILE_ATTRIBUTE_ARCHIVE=32;存档//FILE_ATTRIBUTE_DEVICE=64//FILE_ATTRIBUTE_NORMAL=128;一般//FILE_ATTRIBUTE_TEMPORARY=256//FILE_ATTRIBUTE_SPARSE_FILE=512//FILE_ATTRIBUTE_REPARSE_POINT=1204//FILE_ATTRIBUTE_COMPRESSED=2048;压缩//FILE_ATTRIBUTE_OFFLINE=4096//FILE_ATTRIBUTE_NOT_CONTENT_INDEXED=8192;不被索引//FILE_ATTRIBUTE_ENCRYPTED=16384end;--------------------------------------------------------------------------------//获取文件的创建时间FileAge;FileDateToDateTimevarFileName:string;ti:Integer;dt:TDateTime;beginFileName:='c:\"temp\"Test.txt';ti:=FileAge(FileName);ShowMessage(IntToStr(ti));//返回:931951472,需要转换dt:=FileDateToDateTime(ti);//转换ShowMessage(DateTimeToStr(dt));//2007-12-1214:27:32end;

因篇幅问题不能全部显示,请点此查看更多更全内容