文字列の SJIS での保存
Delphi 2009 では string が UnicodeString になった関係で Stream.WriteBuffer(S[1], Length(S)) ではおかしくなる. TBytes (array of Byte) に変換してから書き込む必要がある.
var Stream: TStream; Buffer: TBytes; begin Stream := TFileStream.Create(FileName, fmCreate); try Buffer := TEncoding.Default.GetBytes(S); Stream.WriteBuffer(Buffer[0], Length(Buffer)); finally Stream.Free; end; end;
TEncoding.Default.GetBytes は BytesOf というショートカット関数が用意されているので、本当はそっちを使うのが吉.
こんな堅苦しくやるのが嫌なのであれば
with TStringList.Create do try Text := S; SaveToFile(FileName); finally Free; end;
こんな風にやっても良い. このコードは Delphi 2007 以前でも同じように使える.