西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发Delphi → Delphi文件读写操作常用的方法

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

前往专题相关软件相关文章发表评论 来源:百度搜索时间:2012/8/22 11:11:25字体大小:A-A+

作者:西西点击:759次评论:0次标签: Delphi7

Delphi77.0 Build 8.1企业版龙卷风集成Update1
  • 类型:编程工具大小:150.0M语言:英文 评分:4.0
  • 标签:
立即下载

在进行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
    Delphi
    (9)Delphi
    比以往的版本都要快,而且它保留了一些的特性,最大的特点就是向下兼容的能力,与相比,简直是一个巨大的飞越,编码的问题大多被自行消化掉了。的新功能其实并不是很多,并没有那么惊艳,主要都集中在细节改进。...更多>>
    • Embarcadero RAD Studio 2010v2010

      05-15 / 1.66G

      推荐理由:本软件系 Embarcadero公司(CodeGear的)RAD Studio 正版软件。也是正式版软件。 不需要任何序列号和破解文
    • delphi 2010

      03-26 / 604KB

      推荐理由:请仔细看使用说明觉对真的 本人亲自测试Delphi新版本(D2010)简介:1. 多核的支持 / 异步方法 (VC中早就拥有
    • Delphi 5安装版

      01-10 / 224.2M

      推荐理由:delphi 5 Delphi是著名的Borland(现在已和Inprise合并)公司开发的可视化软件开发工具。“真正的程序员用c
    • Delphi 7(集成控件)v7.0Build8.1企

      03-25 / 211.9M

      推荐理由:Borland Delphi V7.0 Build 8.1企业版 龙卷风集成U pdate1 已集成官方的Update1完整升级包,版本号为,安装
    • Delphi7_Lite_Mini_Edition_v7.3.1

      08-30 / 22.6M

      推荐理由:elphi7精简优化迷你版,包含帮助.只支持Standard,DB,ADO,BDE,DBX,Midas,ShellCtrls,internet,Delphi 1.0 Com
    • Delphi77.0 Build 8.1企业版龙卷风

      05-15 / 150.0M

      推荐理由:Borland Delphi V7.0 Build 8.1企业版 龙卷风集成U pdate1 已集成官方的Update1完整升级包,版本号为,安装

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    第 2 楼 江苏镇江电信 网友 客人 发表于: 2015/6/17 12:51:23
    好!很具体,很清楚,对需要文件处理的人 非常有用

    支持( 0 ) 盖楼(回复)

    第 1 楼 中国CZ88.NET 网友 客人 发表于: 2013/3/15 15:46:03
    我就是想要这方面的,非常好!!!!

    支持( 0 ) 盖楼(回复)

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)