文字列の 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 以前でも同じように使える.