首页  编辑  

获取Delphi中文本文件TextFile的大小

Tags: /超级猛料/Stream.File.流、文件和目录/文件操作/   Date Created:

获取Delphi中文本文件TextFile的大小

By Kingron

Delphi封装了文本文件,提供一个TextFile便于程序员可以方便地操作文本文件。但是Delphi中没有对TextFile做出详细的说明,导致一些问题的存在,例如FileSize就存在返回文件大小不正确的问题。

为了提高操作效率,TextFile被实现的时候,默认采取128字节的缓冲区,该缓冲区被当成一个记录,而Delphi的函数FileSize返回的是记录大小,因此如果你要根据文件的大小进行某些操作,那么就要注意了!例如下面的代码就不正确:

var

 F: TextFile;

 FileName: string;

 i: Integer;

 Size: Integer;

begin

 FileName:= ExtractFilePath(ParamStr(0)) + 'Log.txt';

 AssignFile(F, FileName);

 Rewrite(F);

 for i:= 0 to 100 do

    begin

    Writeln(F, 'Take me to your Heart');

    //判断当前文件大小,如果大于1KB就停止写文件

    Size:= FileSize(F);

    if Size > 1024 then

       Break;

    end;

 CloseFile(F);

end;

本来应该是1KB左右的文件,结果变成2KB了~,正确的写法应该是:

var

 F: TextFile;

 FileName: string;

 i: Integer;

 Size: Integer;

begin

 FileName:= ExtractFilePath(ParamStr(0)) + 'Log.txt';

 AssignFile(F, FileName);

 Rewrite(F);

 for i:= 0 to 100 do

 begin

    Writeln(F, 'Take me to your Heart');

    //判断当前文件大小,如果大于1KB就停止写文件

    Size:= FileSize(F) * TTextRec(F).BufSize;

    if Size > 1024 then

       Break;

    end;

 CloseFile(F);

end;