作者:admin 来源: 日期:2020/1/1 2:26:18 人气: 标签:
纲要:AssignFile: 关联Rewrite: 创建并打开一个新文件, 如已存在则覆盖Reset: 打开已存在的文件; 追加也要用它先打开, 然后再移动指针; Append 是文本文件专用的CloseFile: 关闭
FileSize: 记录数FilePos: 返回文件的当前位置Seek: 把文件指针移到指定位置(只用于结构化文件)Eof: 文件尾
Read: 读Write: 写
另外: 包含长字符串、变量、类实例、接口或动态数组的记录不能写入类型文件中!//操作示例:unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
type TPersonRec = packed record name: string[12]; age: Word; birthday: TDate; end; //先定义一个结构
var DataFile: file of TPersonRec; //声明 DataFile 用来读写 TPersonRec 结构数据 PersonRec: TPersonRec; //声明结构变量 FileName: string = 'c:\temp\test.dat'; //准备操作的文件
//创建并写入文件procedure TForm1.Button1Click(Sender: TObject);begin AssignFile(DataFile,FileName); //关联文件 Rewrite(DataFile); //建立文件, 如果存在就覆盖
PersonRec.name := '张三'; PersonRec.age := 18; PersonRec.birthday := StrToDate('1990-1-1'); Write(DataFile,PersonRec); //写入
PersonRec.name := '李四儿'; PersonRec.age := 81; PersonRec.birthday := StrToDate('1927-11-11'); Write(DataFile,PersonRec); //写入
CloseFile(DataFile); //关闭end;
//追加数据procedure TForm1.Button2Click(Sender: TObject);begin AssignFile(DataFile,FileName); Reset(DataFile); //Append 只对文本文件 Seek(DataFile,FileSize(DataFile)); //移到文件尾, 这里的 FileSize 表示有多少条记录
PersonRec.name := '王二麻子'; PersonRec.age := 1; PersonRec.birthday := StrToDate('2006-12-19'); Write(DataFile,PersonRec);
PersonRec.name := '嫦娥'; PersonRec.age := 2000; PersonRec.birthday := StrToDate('0007-7-7'); Write(DataFile,PersonRec);
CloseFile(DataFile);
end;
//读取数据(用Memo显示数据吧)procedure TForm1.Button3Click(Sender: TObject);begin AssignFile(DataFile,FileName); Reset(DataFile);
Memo1.Clear; Read(DataFile,PersonRec); //读取一条, 指针自动移到下一条 Memo1.Lines.Add(PersonRec.name); Memo1.Lines.Add(IntToStr(PersonRec.age)); Memo1.Lines.Add(DateToStr(PersonRec.birthday));
Read(DataFile,PersonRec); //读取下一条 Memo1.Lines.Add(PersonRec.name); Memo1.Lines.Add(IntToStr(PersonRec.age)); Memo1.Lines.Add(DateToStr(PersonRec.birthday));
Seek(DataFile,FileSize(DataFile)-1); //指针移到最好一条 Read(DataFile,PersonRec); Memo1.Lines.Add(PersonRec.name); Memo1.Lines.Add(IntToStr(PersonRec.age)); Memo1.Lines.Add(DateToStr(PersonRec.birthday));
CloseFile(DataFile);
{显示结果: 张三 18 1990-1-1 李四儿 81 1927-11-11 嫦娥 2000 0007-7-7}end;
//修改数据procedure TForm1.Button4Click(Sender: TObject);begin AssignFile(DataFile,FileName); Reset(DataFile);
Seek(DataFile,3); //指针移到第四条 Read(DataFile,PersonRec); //读取 PersonRec.age := 0; PersonRec.birthday := StrToDate('2007-10-24');
Seek(DataFile,3); //指针移到第四条 Write(DataFile,PersonRec); //写入
CloseFile(DataFile);end;
//读取所有数据procedure TForm1.Button5Click(Sender: TObject);begin AssignFile(DataFile,FileName); Reset(DataFile);
Memo1.Clear; while not Eof(DataFile) do begin Memo1.Lines.Add('第 ' + IntToStr(FilePos(DataFile)+1) + ' 条:'); Read(DataFile,PersonRec); Memo1.Lines.Add(PersonRec.name); Memo1.Lines.Add(IntToStr(PersonRec.age)); Memo1.Lines.Add(DateToStr(PersonRec.birthday)); Memo1.Lines.Add(''); //来个空行 end;
CloseFile(DataFile);
{显示结果: 第 1 条: 张三 18 1990-1-1
第 2 条: 李四儿 81 1927-11-11
第 3 条: 王二麻子 1 2006-12-19
第 4 条: 嫦娥 0 2007-10-24}
end;
end.
来源:https://www.cnblogs.com/del/archive/2007/12/19/1005813.html