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;
一点点笔记,以便以后翻阅。