文件的操作

本文详细介绍了在Delphi中如何进行TXT、INI及无类型文件的基本操作,包括读取、写入、追加等,并展示了文件复制的两种实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//----------------------------------------------------//

//               TXT文件操作                          //

//----------------------------------------------------//

procedure TForm1.Button1Click(Sender: TObject);//读操作

var

  MyTextFile: TextFile;

  s: string;

  j: Integer;

  sDir: string;

begin

  sDir := ExtractFilePath(paramstr(0)) + 'Test.txt';

  //关联文件

  AssignFile(MyTextFile,Sdir);

  //判断文件是否存在  

  if FileExists(sDir) then

    //以只读方式打开文本

    Reset(MyTextFile)

  else

    Raise Exception.Create('文件不存在!');

  try

    while not eof(MyTextFile) do

    begin

      Readln(MyTextFile,s);

      Memo1.Lines.Add(s );

    end;

  finally

    CloseFile(MyTextFile);

  end;

end;



procedure TForm1.Button2Click(Sender: TObject);   //写操作

var

  MyTextFile: TextFile;

  s: string;

  i: Integer;

  sDir: string;

begin

  sDir := ExtractFilePath(paramstr(0)) + 'Test.txt';

  //关联文件

  AssignFile(MyTextFile,Sdir);

  //覆盖或创建新文件

  ReWrite(MyTextFile);

  //写文件

  s := Memo2.Text;

  //WriteLn(MyTextFile,s);(两种演示)

  //{

   s:='This is Line #';

   for i := 1 to 5 do

    WriteLn(MyTextFile,s,i,'接着此行继续写的文件');

  //}

  CloseFile(MyTextFile);

end;

procedure TForm1.Button3Click(Sender: TObject);//追加操作

var

  MyTextFile: TextFile;

  s: string;

  i: Integer;

  sDir: string;

begin

  sDir := ExtractFilePath(paramstr(0)) + 'Test.txt';

  //关联文件

  AssignFile(MyTextFile,sDir);

  if FileExists(sDir) then

    Append(MyTextFile)

  else

    raise Exception.Create('文件不存在!');

  try

    for i := 6 to 10 do

    begin

      s := 'another#';

      Writeln(MyTextFile,s,i);

    end;

  finally

    CloseFile(MyTextFile);

  end;

end;

//----------------------------------------------------//

//               INI文件操作 (Myinifile: TInifile;) //

//----------------------------------------------------//

procedure TForm1.BitBtn1Click(Sender: TObject); //读操作

var

  SFileName: string;

begin

  {将配置文件 参数读出显示在edit}

  SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';

  if not FileExists(SFileName) then

    raise Exception.Create('文件不存在!')

  else

  begin

    Myinifile := TIniFile.Create(SFileName);

    edit2.Text := Myinifile.ReadString('小节名一','关键字1','');

    edit3.Text := Myinifile.ReadString('小节名一','关键字2','');

    edit4.Text := Myinifile.ReadString('小节名二','关键字1','');

    myinifile.Free;

  end;

end;



procedure TForm1.BitBtn2Click(Sender: TObject);//写操作

var

  SFileName: string;

begin

  {将配置文件 参数读出显示在edit}

  SFileName := ExtractFilePath(paramstr(0)) + 'MyTest.ini';

  Myinifile := TIniFile.Create(SFileName);

  Myinifile.WriteString('小节名一','关键字1',edit2.Text);

  Myinifile.WriteString('小节名一','关键字2','关键字2的内容');

  Myinifile.WriteString('小节名二','关键字1',edit4.Text);

  myinifile.Free;

end;



//----------------------------------------------------//

//               无类型文件操作                       //

//  procedure BlockRead(var F: File; var Buf;Count: Integer[;var AmtTransferred: Integer]);

//  procedure BlockWrite(var F: File;var Buf;Count: Integer[;var AmtTransferred: Integer]);

// F:无类型文件变量;Buf读出或写入数据的缓冲区变量;Count本次操作读写记录数量;实际读出、写入记录数目

//----------------------------------------------------//

procedure TForm1.Button1Click(Sender: TObject); //写

var

  UnTypeFile: file;

  Buffer: array[0..127] of Byte;

  NumWrite: Integer;

begin

  AssignFile(UnTypeFile,'MyFile.dat');

  if FileExists('MyFile.dat') then

    Reset(UnTypeFile)

  else

    ReWrite(UnTypeFile);

  try

    Seek(UnTypeFile,FileSize(UnTypeFile));

    FillChar(Buffer,Sizeof(Buffer),'F');

    BlockWrite(UnTypeFile,Buffer,1,NumWrite);

  finally

    CloseFile(UnTypeFile);

  end;       

end;

procedure TForm1.Button2Click(Sender: TObject);//读

var

  UnTypeFile: file;

  Buffer: array[0..127] of Byte;

  NumRead: Integer;

  s: string;

  i: Integer;

begin

  AssignFile(UnTypeFile,'MyFile.dat');

  Reset(UnTypeFile);

  try

    BlockRead(UnTypeFile,Buffer,1,NumRead);

  finally

    CloseFile(UnTypeFile);

  end; 

end;

//----------------------------------------------------//

//           文件的复制 (两种方式)                  //

//----------------------------------------------------//

1.利用文件流拷贝文件

procedure FileCoyeA(const SourceFileName,TargetFileName: string);

var

  S,T: TFileStream;

begin

  S := TFileStream.Create(SourceFileName,fmOpenRead);//创建源文件的文件流

  try

    T := TFileStream.Create(TargetFileName,fmOpenWrite or fmCreate);//创建目标文件的文件流

    try

      T.CopyFrom(S,S.Size); //拷贝

    finally

      T.Free;//释放文件流

    end;

  finally

    S.Free;

  end;

end;

2.利用内存块拷贝文件

procedure FileCopyB(Const FromFile,ToFile: string);

var

  FromF,ToF: file;

  NumRead,NumWritten: Integer;

  Buf: array[1..2048] of Char;

begin

  AssignFile(FromF,'MyFile.dat'); //关联源文件

  Reset(FromF,1);//打开文件,每次只读一个字节

  AssignFile(ToF,'file2.dat');

  ReWrite(ToF,1);

  repeat //循环读写

    BlockRead(FromF,Buf,Sizeof(Buf),NumRead);

    BlockWrite(ToF,Buf,Numread,NumWritten);

  until (NumRead = 0) or (NumWritten <> NumRead);

  CloseFile(FromF); //关闭文件

  CloseFile(ToF);

end;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值