前言:
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.

浙公网安备 33010602011771号