将带有空字符的字符串保存到文件中

时间:2013-01-27 01:09:50

标签: delphi delphi-7

我有一个包含空字符的字符串。

我已尝试使用此代码将其保存到文件中:

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

不幸的是,如果源字符串在开头有一个空字符,则myStringList.Text为空。

我以为只有C字符串被空字符终止,并且Delphi总是很好用。

如何将字符串的内容保存到文件中?

3 个答案:

答案 0 :(得分:6)

我认为您的意思是“保存其中包含#0个字符的字符串”。

如果是这种情况,请不要尝试将其放入TStringList。实际上,不要试图将它保存为字符串;就像在C中一样,NULL字符(Delphi中为#0)会导致字符串有时被截断。使用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;

答案 1 :(得分:5)

当您设置Text对象的TStrings属性时,新值将被解析为以null结尾的字符串。因此,当代码到达您的空字符时,解析将停止。

我不确定为什么Delphi RTL代码是以这种方式设计的,而且没有记录,但这就是设置Text属性的工作原理。

您可以使用Add方法而不是Text属性来避免这种情况。

myStringList.Clear;
myStringList.Add(myString);
myStringList.SaveToFile(FileName);

答案 2 :(得分:3)

关于一般地将字符串写入文件..我仍然看到人们创建流或字符串列表只是为了将一些东西写入文件,然后销毁流或字符串列表。

Delphi7还没有IOUtuls.pas,但是你错过了。

有一个方便的TFile记录,使用类方法,您可以使用单行将文本写入文件,而无需临时变量:

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

升级使您作为Delphi开发人员的生活变得更加轻松。这只是一个很小的例子。

相关问题