纲要:
AssignFile: 关联
Rewrite: 创建并打开一个新文件, 如已存在则覆盖
Reset: 打开已存在的文件; 追加也要用它先打开, 然后再移动指针; Append 是文本文件专用的
CloseFile: 关闭
FileSize: 记录数
FilePos: 返回文件的当前位置
Seek: 把文件指针移到指定位置(只用于结构化文件)
Eof: 文件尾
Read: 读
Write: 写
另外: 包含长字符串、变量、类实例、接口或动态数组的记录不能写入类型文件中!
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.