在将一些代码从Delphi 7移植到Delphi 2010时,我正在重写我的LoadTextFromFile()函数。
function LoadTextFromFile(const aFullFileName: string): string;
var
lBuffer: TBytes;
lEncoding: TEncoding;
lFileStream: TFileStream;
lSize: Integer;
begin
if not FileExists(aFullFileName) then
begin
raise Exception.Create('File "' + aFullFileName + '" not found.');
end;
lFileStream := TFileStream.Create(aFullFileName, fmOpenRead + fmShareDenyNone);
try
if lFileStream.Size <= 0 then
begin
Result := '';
end
else
begin
lSize := lFileStream.Size - lFileStream.Position;
SetLength(lBuffer, lSize);
// Read file into TBytes buffer
lFileStream.Read(lBuffer[0], lSize);
// Read encoding from buffer
TEncoding.GetBufferEncoding(lBuffer, lEncoding);
// Get string from buffer
Result := lEncoding.GetString(lBuffer);
end;
finally
lFileStream.Free;
end;
end;
当我思考时,突然想到标准库中一定有类似的函数。很多用户都想将文本文件读入字符串中,但我却找不到这样的标准函数。最接近的方法是使用TStringlist加载文本。但是A)创建TStringlist看起来是不必要的,B)我不想承受TStringlist带来的额外开销。
问题:Delphi 2010中是否有标准的LoadTextFromFile函数?
TStringStream
而不是TFileStream
,并使用 Marco 的答案。另外,我很好奇:在什么情况下,您曾经发现Position
属性在创建流后不是零,以至于您需要从Size
中减去它才能计算lSize
? - Rob Kennedy