Delphi 2009. Sauvegarder et restore la chaîne de caractères a partir du fichier texte

Depuis la version 2009 de Delphi les chaînes de caractères sont Unicode par défaut. Cette évolution vous amène de changer vos routines d’écriture et de lecture des chaînes à partir des fichiers textes.

Pour sauvegarder une chaîne de caractères :

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;

Pour initialiser une chaîne de caractères par le texte stocké dans le fichier :

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;

Puisque le type interne string est le synonyme de type UnicodeString basée sur le standard UTF-16, les fragmentes du code ci-dessus vont fonctionner correctement dans les versions précédentes (testé en 2007 et 2006) sans la compilation conditionnelle.

Par contre, pour la classe TStringStream il vous faut spécifier l’encodage explicitement.

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;