1

ヌル文字を含む文字列があります。

私はそれをこのコードでファイルに保存しようとしました:

myStringList.Text := myString;
myStringList.SaveToFile('c:\myfile');

残念ながら、ソース文字列の先頭にnull文字が含まれている場合、myStringList.Textは空になります。

C文字列だけがnull文字で終了していると思いましたが、Delphiは常に問題ありませんでした。

文字列の内容をファイルに保存するにはどうすればよいですか?

4

3 に答える 3

6

「文字が入っている文字列を保存する」という意味だと思います#0

その場合は、に入れないでくださいTStringList。実際、文字列として保存しようとしないでください。Cの場合と同様に、(#0Delphiの)NULL文字を使用すると、文字列が切り捨てられることがあります。を使用してTFileStream、バイトコンテンツとして直接書き込みます。

var
  FS: TFileStream;
begin
  FS := TFileStream.Create('C:\MyFile', fmCreate);
  try
    FS.Write(myString[1], Length(myString) * SizeOf(Char));
  finally
    FS.Free;
  end;
end;

読み返すには:

var
  FS: TFileStream;
begin
  FS := TFileStream.Create('C:\MyFile', fmOpenRead);
  try
    SetLength(MyString, FS.Size);
    FS.Read(MyString[1], FS.Size);
  finally
    FS.Free;
  end;
end;
于 2013-01-27T01:22:51.853 に答える
5

Textオブジェクトのプロパティを設定するTStringsと、新しい値はnullで終了する文字列として解析されます。したがって、コードがヌル文字に達すると、解析が停止します。

Delphi RTLコードがそのように設計され、文書化されていない理由はわかりませんが、Textプロパティの設定が機能するのはそのためです。

Addプロパティではなくメソッドを使用することで、これを回避できTextます。

myStringList.Clear;
myStringList.Add(myString);
myStringList.SaveToFile(FileName);
于 2013-01-27T09:28:01.803 に答える
3

一般的なファイルへの文字列の書き込みについて..ファイルに何かを書き込むためだけにストリームまたは文字列リストを作成し、ストリームまたは文字列リストを破棄する人がまだいます。

Delphi7にはまだIOUtuls.pasがありませんでしたが、それを見逃しています。

一時変数を必要とせずに、1行でファイルにテキストを書き込むことができるクラスメソッドを備えた便利なTFileレコードがあります。

TFile.WriteAllText('out.txt','hi');

アップグレードすると、Delphi開発者としての生活がはるかに簡単になります。これはほんの小さな例です。

于 2013-01-27T17:18:51.193 に答える