DELPHI经典编程入门(6)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

[Delphi园地]第六章文件管理(一)        文件是同一类型元素的有序集合,是内存与外设间传输数据的渠道。一些外设如显示器、键盘、打印机等都可以看作文件,但最常用的还是磁盘文件,这也是本章我们主要讨论的对象。        Delphi继承了ObjectPascal的文件管理功能,并有很大的发展,其中最主要的是提供了用于文件管理的标准控件,同时也提供了更多的文件管理函数。利用Delphi的强大功能,开发一个自己的文件管理系统就成为很容易的事。        本章首先介绍Delphi文件管理的基本概念和标准过程/函数,并提供了一个记录文件的应用实例,这是从我们实际课题开发中提取出来的。而后介绍Delphi提供的文件控件的使用方法。最后提供的一个综合例程MDI文件管理器则是对Delphi文件管理功能的综合应用。6.1文件类型和标准过程       Delphi同ObjectPascal一样支持三种文件类型,即:文本文件、记录文件、无类型文件。6.1.1文本文件     文本文件类型的变量用如下方法声明:varTextFileVar:Text;      文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。而且文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。6.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异常。有关I/O异常的处理请参看本章例程和第十二章中的介绍。      文件的关闭很简单,只须调用CloseFile过程即可。       虽然Delphi应用程序在退出时会自动关闭所有打开的文件,但自己动手关闭文件可以确保释放文件句柄,并使程序的可移植性增强。       为保持兼容,Delphi也允许用户用Assign建立关联,Close关闭文件。页码,1/50第六章文件管理(一)6.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为一个临时字符变量。6.1.1.3文本文件的编辑       在Delphi中实现对一个文本文件的编辑,只须让其与一个Tmemo控件建立关联即可:Memo1.Lines.LoadFromFile(TextFileName);这样在TMemo上所做的一切修改当调用Memo部件的SaveToFile方法后都会反映到文件中去。6.1.2记录文件      记录文件是一种操作更为灵活的文件类型。它允许同时为读和写打开,而且由于记录文件中每条记录的长度固定,所以可随机存取。记录文件的类型变量可如下声明:页码,2/50第六章文件管理(一)varRecordFileVar:fileofRecordType;RecordType是一个自定义的记录类型。     有关记录文件的操作我们将在下一节中结合例程进行讨论。6.1.3无类型文件     无类型文件提供了底层的I/O通道,可用于存取可变长度记录的文件。经常用于文件的复制操作中。由于Delphi提供了更好的方法(见第四节),所以无类型文件很少使用。有兴趣的读者可参看BlockRead、BlockWrite两个联机帮助主题。6.1.4Delphi的文件管理标准过程     根据功能我们把标准过程划分为十一类进行介绍。6.1.4.1文件的打开与关闭AssignFile:把一个外部文件名和一个文件变量相关联Reset:打开一个存在的文件Rewrite:创建并打开一个新文件(或覆盖原有文件)Append:以添加方式打开一个文件(只适用于文本文件)CloseFile:关闭一个打开的文件FileOpen:打开一个特定的文件并返回文件句柄FileCreate:创建一个给定文件名的文件并返回文件句柄FileClose:关闭一个特定句柄的文件      后边三个文件主要供系统内部使用,在文件复制的编程中也往往会用到。它们操作的对象是文件句柄而不是文件变量。6.1.4.2文件定位Seek:把文件当前位置移到指定部分FilePos:返回文件的当前位置Eoln:返回行结束标志EOF:返回文件结束标志FileSeek:改变当前文件指针的位置      Seek与FileSeek的区别是:1.Seek仅用于记录文件;2.FileSeek的参数是文件句柄、偏移量、起始位置。其中起始位置有文件首、当前位置、文件尾三种选择。Seek的参数是文件变量、偏移量,偏移量是从文件首开始定位的。3.FileSeek的偏移量以字节数来计算,而Seek是根据记录号进行移动。      Seek、FilePos仅用于记录文件。但任何文件都可以看作是基于字节的记录文件。下面一段程序表示了它们的用法。{该例子的设计界面为一个包含TOpenDialog部件的窗体。}页码,3/50第六章文件管理(一)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.6.1.4.3文件删除与截断Erase:删除一个存在的文件DeleteFile:删除一个文件Truncate:从文件当前位置将文件截断        Erase与DeleteFile的区别是:Erase以文件变量为参数,当文件不能删除时引起一个异常;DeleteFile以文页码,4/50第六章文件管理(一)件名为参数,当文件不存在或不能删除时返回False,而并不引起一个异常。6.1.4.4文件名操作Rename:文件更名,以文件变量为操作对象RenameFile:文件更名,参数为文件的原名和新名ChangeFileExt:改变文件扩展名ExpandFileName:返回文件全路径名ExtractFileExt:返回文件扩展名ExtractFileName:从全路径名中返回文件名ExtractFilePath:返回特定文件的路径6.1.4.5文件属性FileGetAttr:返回文件属性FileSetAttr:设置文件属性6.1.4.6文件状态FileSize:返回文件对象大小IOResult:返回上一次I/O操作的状态FileExists:检测文件是否存在6.1.4.7文件日期DateTimeToFileDate:把Delphi日期格式转换为DOS日期格式FileDateToDateTime:把DOS日期格式转换为Delphi日期格式FileGetDate:返回文件的DOS日期时间戳FileSetDate:设置文件的DOS日期时间戳6.1.4.8文件读写Read,Readln:从文本或记录文件中读取变量Write:将指定变量写入文本或记录文件Writeln:将指定变量写入文本文件并写入一个行结束标志FileRead:从一个指定文件中读取变量FileWrite:向指定文件写入数据FileRead和FileWrite都是以文件句柄为操作对象,主要供系统内部使用。6.1.4.9目录操作MkDir:创建当前目录的子目录页码,5/50第六章文件管理(一)ChDir:改变当前目录GetDir:返回特定磁盘的当前目录RmDir:删除一个空子目录6.1.4.10磁盘操作DiskFree:返回磁盘自由空间DiskSize:返回特定磁盘的大小6.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。在(6.4.4.2)中我们就用到了WindowsAPI函数GetDriveType。有关WindowsAPI函数的情况,请读者参阅相关的资料,这里不再进行介绍。6.2记录文件的应用6.2.1任务介绍在这一节,我们开发一个系统安全性综合评估方法管理系统。系统安全性在复杂项目开发中十分重要,但由于牵涉面广因而很难获得客观、全面的评估值。鉴于此

1 / 50
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功