文件是同一类型元素的有序集合,是内存与外设间传输数据的渠道。一些外设如显示器、键盘、打印机等都可以看作文件,但最常用的还是磁盘文件,这也是我们主要讨论的对象。
Delphi继承了Object Pascal的文件管理功能,并有很大的发展,其中最主要的是提供了用于文件管理的标准控件,同时也提供了更多的文件管理函数。利用Delphi的强大功能,开发一个自己的文件管理系统就成为很容易的事。
首先介绍Delphi文件管理的基本概念和标准过程/函数,并提供了一个记录文件的应用实例,这是从我们实际课题开发中提取出来的。而后介绍Delphi提供的文件控件的使用方法。最后提供的一个综合例程MDI文件管理器则是对Delphi文件管理功能的综合应用。
1 文件类型和标准过程
Delphi同Object Pascal一样支持三种文件类型,即:文本文件、记录文件、无类型文件。
1.1文本文件
文本文件类型的变量用如下方法声明:
var
TextFileVar: Text ;
文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。而且文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。
1.1.1 文本文件的打开、关闭
文本文件的打开需要两个步骤:(1). 文件变量与文件名关联;(2). 初始化读写。
联文件变量与文件名调用AssignFile标准过程:
AssignFile ( TextFileVar , FileName ) ;
FileName 既可以是全路径名,也可以仅是文件名。对于后者系统将在当前目录下查找。
AssignFile是Delphi新提供的一个函数,其功能等价于Object Pascal中的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 ) ;
如果文件中的数值是:
100 200 300
则能够成功读入,而若文件中的数值是
100 200, 300
则Read读入“200,”并试图把它转化成一个数值时会引发一个异常。
当读入字符是字符串时,Read、Readln过程总是读取尽可能多的字符填充到字符串变量中或一直读到行结束符为止。因此从文本文件中读取格式化的字符串数据,必须声明与其长度相匹配的字符串变量。如果要从文件中读取单词,必须先把文件中的每一行读入字符串,然后再从字符串中逐个分析出单词。或者一次只从文本文件中读入一个字符并测试每个字符后是否是单词断开处。
格式化字符串之间的分隔符应读入到一个临时变量中,而字符串与数值、数值与数值间的分隔符读入时会自动识别剔除。对如下一行数据:
Mon 12:10 40 50
定义
var
Day: 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 记录文件
记录文件是一种操作更为灵活的文件类型。它允许同时为读和写打开,而且由于记录文件中每条记录的长度固定,所以可随机存取。
记录文件的类型变量可如下声明:
var
RecordFileVar: file of RecordType;
RecordType是一个自定义的记录类型。
1.3 无类型文件
无类型文件提供了底层的I/O通道,可用于存取可变长度记录的文件。经常用于文件的复制操作中。由于Delphi提供了更好的方法,所以无类型文件很少使用。有兴趣的读者可参看BlockRead、BlockWrite两个联机帮助主题。
1.4 Delphi的文件管理标准过程
根据功能我们把标准过程划分为十一类进行介绍。
1.4.1 文件的打开与关闭
AssignFile :把一个外部文件名和一个文件变量相关联
Reset :打开一个存在的文件
Rewrite :创建并打开一个新文件(或覆盖原有文件)
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部件的窗体。}
程序代码
uses Dialogs;
var
f: file of Byte;
size: Longint;
S: String;
y: Integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
Reset(f);
size := FileSize(f);
S := "File size in bytes: " + IntToStr(size);
y := 10;
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
S := "Seeking halfway into file...";
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
Seek(f,size div 2);
S := "Position is now " + 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/O Routine和File_Management Routine。前者大部分以文件变量为操作对象,而后者大部分以文件名或文件句柄为操作对象。这里为了方便使用,我们按功能重新进行了分类。在下一节中主要应用I/O Routine主题下的过程,而在第四节的综合举例中主要应用File_Management Routine主题下的过程。
另外,Windows提供了许多有关文件管理的API函数。虽然在一般情况下,利用Delphi提供的函数已足够解决问题,但有时候仍然需要使用Windows API。有关Windows API函数的情况,这里不再进行介绍。
转自:http://gh.u9u8.com/u/article_show.asp?id=20167&q_id=2841
分享到:
相关推荐
delphi 读写文本文件.mht
下面将详细介绍如何在Delphi中通过Memo组件来读写文本文件,并讲解如何操作ini文件。 1. **读写文本文件(通过Memo)** 在Delphi中,可以使用TFile和TStream类来读写文件,但这里我们将重点讨论通过TMemo组件的...
在Delphi编程环境中,直接读写文本文件是常见的任务,特别是在处理日志、配置文件或数据存储时。本文将深入探讨如何在不依赖Memo控件的情况下实现这一功能,以提高程序的效率和灵活性。 首先,我们需要引入`System....
`TTextFile`提供了一套丰富的API,如`WriteString`、`ReadString`和`ReadLn`,方便地读写文本行。 在进行文件读写时,通常会用到以下函数: 1. `FileExists`: 检查文件是否存在。 2. `CreateFile`: 创建新文件。 3...
Delphi读写UTF-8、Unicode格式文本文件 .mht
对于用户编辑TMemo中的内容,Delphi并没有直接提供将TMemo的文本转换回XML的功能,但你可以通过以下步骤实现: 1. 分割TMemo的文本: ```delphi var EditedText: string; begin EditedText := Memo1.Text; ...
### Delphi中读写TXT文件的关键知识点 #### 一、Delphi简介 Delphi是一种基于Object Pascal的集成开发环境(IDE),主要用于Windows平台的应用程序开发。它由Borland公司开发,并于1995年首次发布。Delphi集成了...
本文将深入探讨如何使用Delphi通过Memo组件来实现文本文件和ini文件的读写操作。 首先,我们要了解Delphi中的Memo组件。Memo组件在界面上通常表现为一个多行文本框,用于显示或编辑大量文本。它在读写文本文件时...
### Delphi 读写 Office Word DOCX 控件 DOCXReadWrite & AXWReport 开发帮助手册 #### 一、概述 Delphi 是一款流行的跨平台软件开发工具,它支持多种编程语言和技术栈。对于那些需要与 Microsoft Office 文档交互...
在Delphi编程环境中,TFileStream是一个非常...总之,Delphi的TFileStream类是处理文件流的强大工具,适用于各种文件操作,包括读写、追加和合并。通过熟练掌握其用法,开发者可以高效地实现复杂的数据存储和传输任务。
本文将深入探讨如何使用Delphi来实现对文本文件的读写操作。 首先,Delphi提供了TFile和TFileStream类,它们是操作系统I/O功能的封装,可用于读写文件。对于简单的文本文件操作,我们可以使用TFile类的OpenRead和...
以上就是Delphi中基本的文件读写操作,这两个小实例展示了如何进行文本文件的读写。在实际应用中,你可能需要处理更复杂的数据类型,或者使用其他流类,如TStringStream、TMemoryStream等,以适应不同的需求。不过,...
接下来,要实现文件的打开和保存,你需要使用`TOpenDialog`和`TSaveDialog`组件让用户选择文件,并使用内置的`TextFile`流类来读写文本文件。确保处理各种文本编码,如ASCII、UTF-8等,以确保兼容性。 在设计用户...
以下是对Delphi中NFC读写功能的详细讲解。 1. **NFC API的集成**: Delphi通过FireMonkey框架支持跨平台开发,包括Android。在Delphi中,开发者可以使用`TJNFCReader`和`TJNFCWriter`组件来访问Android系统的NFC ...
在Delphi编程环境中,对文本文件的读写是常见的任务,尤其对于初学者而言,掌握这一基础技能至关重要。本文将详细讲解如何使用Delphi进行文本文件的读写操作,以及在实际应用中需要注意的一些关键点。 首先,让我们...
Delphi 提供了多种文件读写方式,包括文本文件、类型文件、流文件等。 在 Delphi 中,文件读写主要通过文件变量(File)和流变量(Stream)来实现。文件变量可以认为是一个指向文件的指针,而流变量则是一种特殊的...
在本文中,我们将深入探讨如何使用Delphi来实现一个文本编辑器。Delphi是一款强大的对象 Pascal 编程环境,以其高效、快速的编译能力和丰富的组件库而受到开发者喜爱。对于初学者和经验丰富的程序员来说,用Delphi...
在Delphi编程环境中,处理文本文件是常见的任务之一,特别是在配置文件(如CFG)的读取和解析上。本文将详细讲解如何使用Delphi的`LoadFromFile`方法来逐行读取CFG文件的内容,以及相关的知识扩展。 首先,`...
不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel中没有这样的单元。Excel是和Delphi一样的方式来存储...
"image"字段通常用于存储大容量的二进制数据,如图片、文档或任何其他非文本数据。本篇文章将深入探讨如何在Delphi中读取和写入SQL Server的"image"字段,特别关注于读取和写入DMP、JPG和GIF等图片格式。 首先,...