前言:
Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。
文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。
文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。
文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。
1.文件变量与文件名关联:
AssignFile(VarTxt, FileName);
FileName 如果省略路径将默认当前目录。
2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。
文件不存在时使用 Reset 或 Append 会引发一个I/O异常。
最后用 CloseFile 关闭文件。
为保持兼容,Delphi 也允许用户用 Assign 建立关联, 用 Close 关闭文件。
图例:
unit uForm_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btn_Write: TButton; edt_Write: TEdit; btn_Read: TButton; btn_Exit: TButton; mmo_ReadAll: TMemo; Label1: TLabel; edt_File: TEdit; btn_Open: TButton; OpenDialog1: TOpenDialog; Label2: TLabel; Label3: TLabel; edt_Read: TEdit; Label4: TLabel; edt_Append: TEdit; btn_Append: TButton; Label5: TLabel; procedure btn_OpenClick(Sender: TObject); procedure btn_ExitClick(Sender: TObject); procedure btn_WriteClick(Sender: TObject); procedure btn_ReadClick(Sender: TObject); procedure btn_AppendClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var F:Text; //TextFile和Text是一样的 FileName: string; procedure TForm1.btn_AppendClick(Sender: TObject); begin if not FileExists(FileName) then //判断文件是否存在 MessageBox(handle, '文件不存在,请重新选择!', '错误', MB_OK+MB_ICONERROR) else begin AssignFile(F, FileName); //文件变量与文件名关联 Append(F); //文件尾部追加,指针移到文件尾 Writeln(F, edt_Append.Text); //将文本框的内容添加到文本末尾 CloseFile(F); //关闭文件 mmo_ReadAll.Lines.LoadFromFile(FileName); //将文件的内容全部读取到Memo里 end; end; procedure TForm1.btn_ExitClick(Sender: TObject); begin Close; end; procedure TForm1.btn_OpenClick(Sender: TObject); begin OpenDialog1.Execute; //打开一个文本文件 edt_File.Text:= OpenDialog1.FileName; //文本框记录文本文件的详细地址 FileName:= edt_File.Text; mmo_ReadAll.Lines.LoadFromFile(FileName); //载入文本中的内容到Memo中 end; procedure TForm1.btn_ReadClick(Sender: TObject); var s:string; begin if not FileExists(FileName) then MessageBox(handle, '文件不存在,请重新选择!', '错误', MB_OK+MB_ICONERROR) else begin AssignFile(F, FileName); Reset(F); //以只读的方式按行顺序读取 Readln(F, s); //这里只读取了一行,需要读取多行可以在CloseFile前追加 edt_Read.Text:= s; CloseFile(F); mmo_ReadAll.Lines.LoadFromFile(FileName); end; end; procedure TForm1.btn_WriteClick(Sender: TObject); begin if not FileExists(FileName) then MessageBox(handle, '文件不存在,请重新选择!', '错误', MB_OK+MB_ICONERROR) else begin AssignFile(F, FileName); ReWrite(F); //会覆盖已存在的文件 Writeln(F, edt_Write.Text); //这里只写入了一行,需要读取多行可以在CloseFile前追加 CloseFile(F); mmo_ReadAll.Lines.LoadFromFile(FileName); end; end; end.