获取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;