纲要:
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.