从 D2007 转换到 XE2,我转换了这个函数
function Add_Line( FileStream : TFileStream; ALine : string) : boolean;
至
function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
AStr: ANSISTring;
begin
Result := True;
if Enc = nil then Enc := TEncoding.ANSI;
try
//Old FileStream.WriteBuffer( Pointer(ALine)^, Length(ALine) );
if Enc = TEncoding.UTF8 then
AStr := UTF8Encode(ALine)
else
AStr := ANSIString(ALine);
FileStream.WriteBuffer( AStr[1], Length(ALine) );
end;
except
Result := False;
end;
end;
理由:
尽可能少地使用 Add_Line 更改代码
接受自动更改为 Unicode,仅在最后一刻写入 8 位文本文件(用于 XML 和 CSV)。如果我们愿意,将来我们仍然可以迁移到 UTF-16 文件。
我本来想定义类似的东西:
function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean;
但编译器抱怨;-)
这样的事情可能吗?