Submitted by st on
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;