You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.3中如何检测文本文件是通过Rewrite还是Append打开?

在Delphi 10.3中检测文本文件是通过Rewrite还是Append打开的方法

Delphi的标准TextFile类型并没有提供原生API直接检测文件是通过Rewrite还是Append打开的——这两个方法本质都是以写入模式打开文件,区别仅在于初始指针位置(Rewrite将指针置于文件开头并清空原有内容;Append将指针置于文件末尾并保留原有内容),而RTL没有把这个打开模式的信息暴露给开发者。

下面是两种可行的替代方案:

方案一:封装文件操作类(推荐)

通过自定义类封装文本文件的打开与操作,将打开模式和文件对象绑定,避免全局变量带来的污染和维护问题。示例代码如下:

type
  TTextFileOpenMode = (tfomRewrite, tfomAppend);
  TTextFileWrapper = class
  private
    FFile: TextFile;
    FOpenMode: TTextFileOpenMode;
  public
    constructor Create(const AFileName: string; AOpenMode: TTextFileOpenMode);
    destructor Destroy; override;
    procedure WriteLn(const S: string); overload;
    procedure WriteLn; overload;
    property OpenMode: TTextFileOpenMode read FOpenMode;
  end;

constructor TTextFileWrapper.Create(const AFileName: string; AOpenMode: TTextFileOpenMode);
begin
  inherited Create;
  FOpenMode := AOpenMode;
  case AOpenMode of
    tfomRewrite: Rewrite(FFile, AFileName);
    tfomAppend: Append(FFile, AFileName);
  end;
end;

destructor TTextFileWrapper.Destroy;
begin
  CloseFile(FFile);
  inherited;
end;

procedure TTextFileWrapper.WriteLn(const S: string);
begin
  System.WriteLn(FFile, S);
end;

procedure TTextFileWrapper.WriteLn;
begin
  System.WriteLn(FFile);
end;

使用时,创建实例并指定打开模式,之后可随时通过OpenMode属性获取打开方式:

var
  FileWrapper: TTextFileWrapper;
begin
  FileWrapper := TTextFileWrapper.Create('test.txt', tfomAppend);
  try
    if FileWrapper.OpenMode = tfomAppend then
      ShowMessage('文件以Append模式打开');
    FileWrapper.WriteLn('新增内容');
  finally
    FileWrapper.Free;
  end;
end;

方案二:通过文件指针位置判断(有局限性)

利用Append打开时指针位于文件末尾、Rewrite打开时指针位于文件开头的特性,通过FilePos和FileSize函数对比判断。但这个方法仅在刚打开文件且未移动指针、未写入内容时有效,一旦指针位置被改变,判断结果就会失效。示例代码:

function IsFileOpenedWithAppend(const AFile: TextFile): Boolean;
var
  FileSizeVal, CurrentPos: Integer;
begin
  FileSizeVal := FileSize(AFile);
  CurrentPos := FilePos(AFile);
  Result := (CurrentPos = FileSizeVal);
end;

内容的提问来源于stack exchange,提问作者Jean-Philippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:10:51