我有一个包含空字符的字符串.
我试图用这段代码将它保存到一个文件:
myStringList.Text := myString;
myStringList.SaveToFile('c:\myfile');
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果源字符串在开头有一个空字符,则myStringList.Text为空.
我以为只有C字符串被空字符终止,Delphi总是很好用.
如何将字符串的内容保存到文件?
我认为你的意思是"保存一个包含#0字符的字符串".
如果是这种情况,请不要尝试将其放入TStringList.实际上,不要试图将它保存为字符串; 就像在C中一样,NULL字符(#0在Delphi中)会导致字符串有时被截断.使用a 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;
Run Code Online (Sandbox Code Playgroud)
读回来:
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;
Run Code Online (Sandbox Code Playgroud)
设置对象的Text属性时TStrings,新值将被解析为以null结尾的字符串.因此,当代码到达您的空字符时,解析将停止.
我不确定为什么Delphi RTL代码是这样设计的,而且没有记录,但这就是设置Text属性的工作方式.
您可以通过使用Add方法而不是Text属性来避免这种情况.
myStringList.Clear;
myStringList.Add(myString);
myStringList.SaveToFile(FileName);
Run Code Online (Sandbox Code Playgroud)