longqcc

学习永远止境,更要学会总结。本博客大多数的内容都是从网上收集而来,加上自已的一点整理。在这里特别感谢“万一”老师的分享,谢谢!

博客园 首页 新随笔 联系 管理
前言:
Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。

文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。

文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。

1.文件变量与文件名关联: 
AssignFile(VarTxt, FileName);
FileName 如果省略路径将默认当前目录。

2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常。

最后用 CloseFile 关闭文件。

为保持兼容,Delphi 也允许用户用 Assign 建立关联, 用 Close 关闭文件。

 
//读写示例:  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;     Button6: TButton;     Button7: TButton;     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     procedure Button3Click(Sender: TObject);     procedure Button4Click(Sender: TObject);     procedure Button5Click(Sender: TObject);     procedure Button6Click(Sender: TObject);     procedure Button7Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;  var   Form1: TForm1;  implementation  {$R *.dfm}  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;  //分列写入 procedure TForm1.Button5Click(Sender: TObject);   //这个过程级函数的功能是: 用空格把 s 凑够 n 的长度   function AddSpace(s: string; n: Word): string;   begin     while Length(s) < n do     begin       s := s + ' ';     end;     Result := s;   end; var   name: string[8];   address: string[16]; begin   AssignFile(F, FileName);   Rewrite(F);    name := '张三';   name := AddSpace(name,8);   address := '山东泰安';   address := AddSpace(address,16);   Writeln(F, name, address);    name := '李四儿';   name := AddSpace(name,8);   address := '贵州省安顺黄果树';   address := AddSpace(address,16);   Writeln(F, name, address);    name := '王二麻子';   name := AddSpace(name,8);   address := '北京市海淀区';   address := AddSpace(address,16);   Writeln(F, name, address);    CloseFile(F); {写入的结果是:   张三    山东泰安   李四儿  贵州省安顺黄果树   王二麻子北京市海淀区 } end;  //分列读取 procedure TForm1.Button6Click(Sender: TObject); var   name: string[8];   address: string[16]; begin   AssignFile(F, FileName);   Reset(F);    Memo1.Clear;   while not Eof(F) do   begin     Readln(F, name);     Memo1.Lines.Add(name);   end;    CloseFile(F);   Reset(F);    while not Eof(F) do   begin     Readln(F, name, address);     Memo1.Lines.Add(address);   end;    CloseFile(F); {读取结果:   张三       李四儿     王二麻子   山东泰安           贵州省安顺黄果树   北京市海淀区     } end;  //不同数据类型的写入和读取 procedure TForm1.Button7Click(Sender: TObject); var   name: string[6];   age: Word;   birthday: TDate; begin   AssignFile(F,FileName);   Rewrite(F);    name := '菜花  ';  //加两个空格凑够6个字符   age := 18;   birthday := StrToDate(DateToStr(Now-18*365));  //假如她今天过生日   Writeln(F,name,age,birthday);    CloseFile(F);   Reset(F);    Readln(F,name,age,birthday);   Memo1.Clear;   Memo1.Lines.Add(name);   Memo1.Lines.Add(IntToStr(age));   Memo1.Lines.Add(DateToStr(birthday));    CloseFile(F);  {读取结果:   菜花   18   1989-12-23 } //其实这样的东西应该用类型文件操作更合适, 但如果有这样的文本文件让你读取呢? end;  end. 
 菊子曰:我在用着的博客编辑软件
posted on 2013-05-18 02:14  longqcc  阅读(198)  评论(0编辑  收藏  举报