Delphi. Строку в файл и обратно.
В связи с переходом на unicode "по умолчанию" в Delphi 2009, функцию записи содержимого строки в файл необходимо немного изменить.
procedure SaveStrToFile(SrcStr: string; FileName: string);
var
FS: TFileStream;
begin
FS := TFileStream.Create(FileName, fmCreate);
try
FS.WriteBuffer(SrcStr[1], Length(SrcStr) * SizeOf(SrcStr[1]));
finally
FS.Free;
end;
end;
Обратное преобразование также придется подправить аналогичным образом
function LoadStrFromFile(FileName: string): string;
var
FS: TFileStream;
begin
FS := TFileStream.Create(FileName, fmOpenRead);
try
SetLength(Result, FS.Size div SizeOf(Result[1]));
FS.ReadBuffer(Result[1], FS.Size);
finally
FS.Free;
end;
end;
Так как string является псевдонимом класса UnicodeString, использующего UTF-16 и двухбайтные символы, то данный код будет корректно работать как в Delphi 2009, так и в предыдущих версиях, например 2007, без дополнительных ухищрений вроде условной компиляции.
То же самое с использованием стандартного класса TStringStream. Приходится указывать кодировку в принудительном порядке.
procedure SaveStrToFile(SrcStr: string; FileName: string);
var
Stream: TStringStream;
begin
Stream := TStringStream.Create(SrcStr, TEncoding.Unicode);
try
Stream.SaveToFile(FileName);
finally
Stream.Free;
end;
end;
function LoadStrFromFile(FileName: string): string;
var
Stream: TStringStream;
begin
Stream := TStringStream.Create('', TEncoding.Unicode);
try
Stream.LoadFromFile(FileName);
Stream.Position := 0;
Result := Stream.ReadString(Stream.Size);
finally
Stream.Free;
end;
end;
blog comments powered by Disqus