Delphi中的ReadStr()和WriteStr()

时间:2013-06-19 04:06:17

标签: string delphi file-io ansistring

我有一些使用ReadStr和WriteStr的代​​码,我认为是将字符串写入二进制文件。

文档中对WriteStr的解释说明它会以AnsiString的形式将原始数据写入对象的流,这是有道理的。但是随后ReadStr说它读了一个字符。他们不是彼此相反吗?

我想说,

pName: String[80];

我在它上面使用WriteStr,它实际写了什么?由于WriteStr需要AnsiString,它是否会将pName转换为这样?在这种情况下,是不是将“长度”字段写入流中,因为AnsiString指针指向第一个元素而不是长度字段?我现在也在寻找,这些天似乎是String == AnsiString,但我对长度字段的问题仍然保持不变。

如果让我们说它没有将长度字段写入文件,它是否仍然在数据末尾写入NULL?因此,我可以通过查找'\ 0'找到字符串结束的位置吗? ReadStr是否读取直到NULL字符?

谢天谢地:)

1 个答案:

答案 0 :(得分:3)

在您的Unicode前版本的Delphi中,WriteStrReadStr会写入并读取AnsiString值。编写代码写入长度,然后写入字符串内容。读取代码读取长度,分配字符串,然后用内容填充它。

当您将ReadStr的结果分配给80个字符的短字符串时,这可能会导致截断。