{-------------------------------------------------------------------------------
过程名: DelBomFromUtf8File 判断并删除utf8文本文件中的前三个字节BOM
参数: filename:string 1.文件名
返回值: boolean 是否删除
-------------------------------------------------------------------------------}
function TReplaceString.DelBomFromUtf8File(filename:string):boolean;
const
UTF8_FLAG=$EFBB;
var
fsRead,fsWrite:TFileStream;
w:word;
b:byte;
filename_tmp:string;
len:integer;
function WordLoHiExchange(w: Word): Word; register;
asm
XCHG AL, AH
end;
begin
result:=false;
if(fileexists(filename)=false)then exit;
fsRead:=TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); // or fmOpenWrite
try
fsRead.Seek(0, soFromBeginning);
fsRead.Read(w,2);
w:= WordLoHiExchange(w);
if w=UTF8_FLAG then
begin
fsRead.Read(b,1);
len:=fsRead.Size-fsRead.Position;
filename_tmp:=filename+'tmp';
fsWrite:=TFileStream.Create(filename_tmp, fmCreate);
fsWrite.CopyFrom(fsRead, len);
fsWrite.Free;
result:=true;
end;
finally
fsRead.Free;
if(result)then
begin
deletefile(filename);
movefile(pchar(filename_tmp),pchar(filename));
end;
end;