我有一个包含空字符的字符串。
我已尝试使用此代码将其保存到文件中:
myStringList.Text := myString;
myStringList.SaveToFile('c:\myfile');
不幸的是,如果源字符串在开头有一个空字符,则myStringList.Text为空。
我以为只有C字符串被空字符终止,并且Delphi总是很好用。
如何将字符串的内容保存到文件中?
答案 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开发人员的生活变得更加轻松。这只是一个很小的例子。