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
Delphi文件读写操作常用的方法相关推荐
- c++ 文件读写_Java文件读写的常用技术
Java文件读写的常用技术--项目开发实战篇 一. 概述: 本文主要以Office办公软件和PDF文件的读写为主线逐步展开说明,分析将相关格式的文件内容文本化的过程.另外针对于Excel文件内容的结构 ...
- C++ builder 的文件读写操作总结
C++ builder 的文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于 ...
- 【转】Android - 文件读写操作 总结
Android - 文件读写操作 总结 原文出处:http://blog.csdn.net/ztp800201/article/details/7322110 在android中的文件放在不同位置,它 ...
- C/C++ 文件读写操作总结
C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于C的文件操作: ...
- VC文件读写操作总结
From:http://www.xiaozhou.net/ReadNews.asp?NewsID=248 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到 ...
- fstream —文件读写操作
一.fstream 文件输入输出流 1.文件读写的三种类型 ifstream:从一个给定文件中读取数据 . ofstream:向一个给定的文件中写入数据 fstream:可以读写给定的文件. 它可以用 ...
- php利用文件做数据储存,PHP_PHP文件读写操作之文件写入代码,在PHP网站开发中,存储数据通 - phpStudy...
PHP文件读写操作之文件写入代码 在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势, ...
- java大文件读写操作
转载自:http://blog.csdn.net/akon_vm/article/details/7429245 RandomAccessFile RandomAccessFile是用来访问那些保存数 ...
- java文件读写操作类
借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...
最新文章
- Spring、Spring Boot和TestNG测试指南 - 测试关系型数据库
- 巧妙使用网页在线工具,让您的工作更简单
- cad无法加载arx文件_多年经验总结CAD技巧8
- html5.js让IE(包括IE6)支持HTML5元素方法
- CSharpGL(29)初步封装Texture和Framebuffer
- wordpress模板-RIPro-V2子主题V1.4-VAN主题
- 什么是 Unix 以及它为什么这么重要?
- 2019.4.26今日任务
- python range函数怎么表示无限_python range函数怎么用
- 海信计算机怎么开机,将海信电视连接到计算机的步骤_计算机的基本知识_IT /计算机_信息...
- 为什么要使用git pull --rebase?
- OC-NSFileManager
- 怎么彻底移除虚拟机_Parallels Desktop虚拟机怎么完全卸载? PD虚拟机完全卸载方法...
- (转)清华学霸演讲稿:永远不要说你已经尽力了
- 动态NAT64实验配置
- 智能人物画像综合分析系统——Day3
- android将彩图转为黑白_android 将图片转换成黑白图片
- Jenkins打包部署项目到Windows或Linux运行
- OpenCV-Python击中击不中HITMISS形态变换详解
- 【附源码】计算机毕业设计SSM网上旅游订票服务系统