Delphi文件读写操作常用的方法

在进行win32开发中对文件的读写是最常用的操作之一,这编文章西西小编和大家一起来学习一下在Delphi中如何读写文件的方法。

Delphi 支持三种文件类型:  文本文件、记录文件、无类型文件。

文本文件的读写:

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

文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

文本文件 的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。

1.文件变量与文件名关联:
AssignFile(VarTxt, FileName);
FileName 如果省略路径将默认当前目录。

2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常。

最后用 CloseFile 关闭文件。

为保持兼容,Delphi 也允许用户用 Assign 建立关联, 用 Close 关闭文件。

第一种、直接用 memo 加载 txt文件

1. memo控件读取txt
memo1.Lines.LoadFromFile('E:\*\*.txt');

要读取一个txt文件的全部内容可以借用到 stringlist 来中转。

建立一个stringlist,如:
var
sList: TStringlist;
begin
   sList := TStringList.Create;
try
   sList.LoadFromFile('C:\a.txt');
finally
sList.Free;
end;
end;

然后可以将TStringList 转换为 string类型  str=ts.GetText ; 来转换



第二种、Delph内建的函数读写

示例代码:

var F: Text; //TextFile 和 Text 是一 的 
FileName: string = 'c:\temp\test.txt';//写文件 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
AssignFile(F,FileName); 
Rewrite(F); //会覆盖已存在的文件
Writeln(F, '第一行'); 
Writeln(F, '第二行');
CloseFile(F); end;
//读文件(先执行写文件) 
procedure TForm1.Button2Click(Sender: TObject); 
var s: string; 
begin AssignFile(F,FileName); 
Reset(F); //只读打开
Readln(F, s); //读取 
ShowMessage(s); //显示: 第一行 
Readln(F, s); //继续读取 
ShowMessage(s); //显示: 第二行
CloseFile(F); 
end;
//追 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
AssignFile(F,FileName); 
Append(F); //打开准备追
Writeln(F, '第三行'); 
Writeln(F, '第四行');
CloseFile(F); 
end;
//读取全部(需要Memo帮忙显示) 
procedure TForm1.Button4Click(Sender: TObject); 
var s: string; 
begin 
AssignFile(F,FileName); 
Reset(F); //只读打开
Memo1.Clear; 
while not Eof(F) do 
begin
Readln(F, s); 
Memo1.Lines.Add(s); 
end;
CloseFile(F); 
end;
 
第三种、Delphi 用流来读取TXT文件
TXT文本文件是一种以ACSII吗存储数据的文件。在TXT文件中只能够存储一些字符数据,所以这种文件的移植性和通用性很强,具有较高的易用性,并且 被广泛应用,所以Delphi对该类型文件提供了较好的支持。目前在Internet上最为流行的XML文件也是一种文本文件。TXT文本文件的操作非常 简单,具体操作过程如下: 
1.首先要声明一个TextFile类型的的文件指针。如:var MyFile:TEXTFile。 
2.然后使用AssignFile方法将声明的文件指针与外部TXT文件相关联。
AssignFile (FileName ) ;
FileName 既可以是全路径名,也可以仅是文件名。对于后者系统将在当前目录下查找。 
3.初始化读写有三种方式: 
Reset为读打开文件并把文件指针移动到文件首;
Rewrite为写创建一个新文件;
Append为写打开存在的文件并把文件指针定位在文件尾。 
4.读取或写入文本。Readln方法能够读取一行文本,writeln方法能向文件写入一行文本。 
5.最后用Closefile方法关闭已打开的文件。 
在这里我们要介绍的就是如何用流来读取TXT文件中的数据,并且在指定显示区域显示出来。
首先让我们通过一个简单范例来了解ReadBuffer方法,让我们来读取指定TXT文件的前10个字符。
procedure TForm1.Button1Click(Sender: TObject); 
var MyFile:TMemoryStream; 
Filebuf: array[1..10] of char; //这里声明的是静态数组 
a:string; 
Begin 
If opendialog1.Execute then 
begin 
MyFile:=TMemoryStream.Create;//创建流 
MyFile.LoadFromFile(opendialog1.FileName); 
MyFile.ReadBuffer(Filebuf,10);//读取TXT文件前10个字符 
a:= strpas(Filebuf) //将数组转化成为字符串 
Form1.canvas.Textout(0,0,a); //在显示区域上显示字符串 
FreeAndNil(MyFile);//释放流 
end; 
end;
以上范例在窗体Form1上显示的字符串就是打开TXT文本的前10个字符,但是如何得到文本的所有数据呢?这里就需要用到动态数组。动态数组在流中 的应用是个难点, 为Delphi中的静态数组是在运行前就已经将内存空间分配好,所以它的变量地址就是数组的第一维地址,即没有描述部份,故它的 sizeof为1个字节,而动态数组是在运行期间动态分配一个内存块,所以它的变量地址部分需要一个描述部分,故它的sizeof为四个字节,用于存放描 述表,所以在用 Readbuffer方法时,需要采用数组的第一维地址为起始地址,才不会导致内存溢出。下面这个范例就是用流来读取TXT文件中的全部数据。
procedure TForm1.Button1Click(Sender: TObject); 
var MyFile:TMemoryStream; 
Filebuf: array of pchar; //这里声明的是动态数组 
iLen:Int64; 
Begin 
If opendialog1.Execute then 
begin 
iLen:=0; 
MyFile:=TMemoryStream.Create; 
MyFile.LoadFromFile(opendialog1.FileName); 
iLen:=MyFile.Size;//获得指定TXT文件的大小 
SetLength(FileBuf,iLen);//设置动态数组的长度为TXT文件的大小 
MyFile.ReadBuffer(FileBuf[0],iLen);//读取TXT文件全部数据 
Form1.canvas.Textout(0,0,string(FileBuf)); //在显示区域上显示字符串; 
FreeAndNil(MyFile); 
end; 
end;
以上的范例可在窗体Form1上显示指定TXT文件的全部数据。 
现在让我们来 究一下如何从TXT文本中的指定位置读取一定量的数据,这里用到的函数就是seek(offset:integer,origin:word)integer; 它的参数所代表的意义: offset是偏移量; 而origin是计算方式 ,下面三个就是origin的值,soFromBeginning是从文件头开始计算,soFromCurrent是从当前位置开始计算,而soFromEnd Offset是从最后位置开始计算。 
下面这个范例就是从TXT文本中的指定位置取一定量的数据 
procedure TForm1.Button1Click(Sender: TObject); 
var MyFile:TMemoryStream; 
Filebuf: array of pchar; //这里声明的是动态数组 
iLen:Int64; 
Begin 
If opendialog1.Execute then 
begin 
iLen:=0; 
MyFile:=TMemoryStream.Create; 
MyFile.LoadFromFile(opendialog1.FileName); 
iLen:=MyFile.Size; 
SetLength(FileBuf,1024);//设置动态数组的长度; 
Myfile.Seek(1024, soFromBeginning);//从文件头开始计算到1024个字节处 
MyFile.ReadBuffer(FileBuf[0],1024);//从seek设置的当前位置往后读取1024字节 
Form1.canvas.Textout(0,0,string(FileBuf)); //在窗体上显示; 
FreeAndNil(MyFile); 
end; 
end
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种编程语言和集成开发环境,它提供了读写XML文件的功能。在Delphi中,可以使用TXMLDocument组件来处理XML文件。 要读取XML文件,首先需要在代码中创建TXMLDocument对象,并通过其LoadFromFile方法将XML文件加载到内存中。加载完成后,可以通过访问TXMLDocument对象的DocumentElement属性来获取XML文件的根元素。使用DocumentElement属性返回的是一个IXMLNode接口类型的对象,可以通过其子节点和属性来访问XML文件中的数据。 对于写入XML文件,同样需要创建TXMLDocument对象,并通过其LoadFromFile方法加载或创建一个XML文件。然后,可以通过代码中的赋值或添加子节点的方式来设置XML文档的结构和数据。最后,使用TXMLDocument对象的SaveToFile方法将修改后的XML文档保存到磁盘上。 在读写XML文件时,可能还需要使用到IXMLNode接口的其他方法和属性。例如,使用ChildNodes属性可以获取当前节点的所有子节点,使用Attributes属性可以获取当前节点的所有属性,使用Text属性可以获取或设置当前节点的文本内容。 除了基本的读写功能,Delphi还提供了其他用于处理XML的组件和库函数。例如,可以使用XPath来定位XML文件中的节点,使用XSLT进行XML数据的转换,使用XMLDataBinding创建与XML结构对应的对象模型等等。 总的来说,Delphi提供了丰富和方便的功能来读写XML文件,使开发人员可以轻松地处理XML数据。无论是对于简单的XML文件操作还是复杂的XML数据处理,都可以通过Delphi的强大的XML处理功能来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值