Delphi 判断文件是否为UTF-8-BOM的文件

RAD Studio 10.2.3 测试√


  • 打开模式:
    fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。
    fmOpenRead :以只读方式打开指定文件
    fmOpenWrite :以只写方式打开指定文件
    fmOpenReadWrite:以写写方式打开指定文件
  • 共享模式:
    fmShareCompat :共享模式与FCBs兼容
    fmShareExclusive:不允许别的程序以任何方式打开该文件
    fmShareDenyWrite:不允许别的程序以写方式打开该文件
    fmShareDenyRead :不允许别的程序以读方式打开该文件
    fmShareDenyNone :别的程序可以以任何方式打开该文件

方法一:流的形式读取

function TForm3.CheckUTF8FileBOMStream(const FileName: string): Boolean;
var
  mFileStream: TFileStream;
  mHeads: array[0..2] of Byte;
begin
  // fmOpenRead :以只读方式打开指定文件
  // fmShareDenyWrite:不允许别的程序以写方式打开该文件
  Result := False;

  mFileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    if mFileStream.Size = 0 then
    begin
      // 空文件
      Exit;
    end;

    if mFileStream.Size > 3 then
    begin
      mFileStream.Position := 0;
      mFileStream.Read(mHeads, 3);
      Result := (mHeads[0] = $EF) and (mHeads[1] = $BB) and (mHeads[2] = $BF);
    end;
  finally
    mFileStream.Free;
  end;
end;

方法二:

function TForm3.CheckUTF8FileBOM(const FileName: string): Boolean;
var
  mFile: File;
  bytes: array[0..2] of byte;
  amt: integer;
begin
{
初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常
}

  // 以只读方式打开指定文件
//  FileMode := fmOpenRead;
  // 系统默认的 FileMode 好像是 2 fmOpenReadWrite

  AssignFile(mFile, FileName);
  Reset(mFile, 1);
  try
    BlockRead(mFile, bytes, 3, amt);
    Result := (amt = 3) and (bytes[0] = $EF) and (bytes[1] = $BB) and (bytes[2] = $BF);
  finally
    CloseFile(mFile);
  end;
end;

一点点笔记,以便以后翻阅。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小印丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值