你好,我需要非常大的二进制文件的工作,所以我不能使用的功能,诸如分派(),Closefile()等,我想用TFileStream的其阅读()/Write()方法。但是我有问题,因为我无法读回我写到流中的内容。我已经了解到问题与编码有关,所以我认为我需要使用Unicode而不是Ansi。但我还没有明白如何去做。有人可以用例子帮助我吗?我知道如何写入/读取/读取文件,但这并不能帮助我解决问题。问题文件二进制/写
回答
对不起,我的答案是错的,就像安德烈亚斯说。也许这篇文章会帮助你? Writing a string to a TFileStream in Delphi 2010
-1。显然你错过了Q的第一句话:“我不能使用函数作为Assign,Closefile等”。另外,您错过了Q的标题:“... ** tfilestream **”。 – 2011-06-10 18:13:50
如果你同时控制书写和阅读,你可以使用读者和作家。例如:
var
reader : TReader;
begin
reader := TReader.Create(MyStream, BufferSize);
try
myString : = reader.ReadString;
finally
reader.Free;
end;
end;
TReader有一种方法来区分unicode和ansistring,只要它们是由TWriter编写的。
如果不控制好写的一部分。你希望有一种方法来知道文件格式。 (至少是字符串和它们的大小)。所以,你可以准备一个缓冲区中读取字符。
如果你想写/自/至流中读取字符串,最简单的方式是投你的字符串作为ShortString短这始终是255字符长(但意味着你的字符串不能超过255个字符)。如果您只需要在流中读取/写入字符串,请改为使用TStringList。
否则,你有其他更复杂的选项:
- 写入/读取的TStringList到流(那么你必须实现一种文件格式)
- 写入字符串,并检索它读取字符通过字符和积累字符,直到遇到空字符,重复每个字符串的操作
-1用于暗示'ShortString':与它相关的太多限制可以用来解决这个问题。用于提示'TStringList'。因为'TStringList'具有'SaveToStream'和'LoadFromStream'方法,更不用说'SaveToFile'和'LoadFromFile'了,所以'TStringList'为'文件类型'。 -1用于暗示读取和写入按char逐字符流。 – 2011-06-10 18:46:42
关于文件格式:您可以将StringList保存到TMemoryStream,然后将MemoryStream.Memory写入主流。我使用了很多:在主文件中,你写流的大小,然后是stream.memory,这是为了无限数量的流。解释文件格式很简单:阅读即将到来的'streamsize',将下一个'streamsize'字节转换为某些东西,等等......关于ShortString:答案中提到了这种方法的局限性。 – az01 2011-06-10 19:12:28
我不明白你为什么要在两者之间使用内存流。为什么不直接将字符串列表保存到文件流? – jpfollenius 2011-06-10 22:17:21
- 1. 写入二进制文件?
- 2. 写入二进制文件
- 3. 写二进制文件
- 4. 写入二进制文件
- 5. 写入二进制文件
- 6. 阅读二进制文件问题
- 7. Android下载二进制文件问题
- 8. 二进制.dat文件问题
- 9. 阅读二进制文件的问题
- 10. 上传二进制文件问题
- 11. 解密二进制文件问题
- 12. 二进制文件加密问题
- 13. 二进制文件中的问题
- 14. 读取二进制文件问题
- 15. 写入/读取二进制文件的uint问题
- 16. 写入和读取二进制文件时发生的问题
- 17. 将列表写入二进制文件时的问题
- 18. 二进制文件写入/读取的问题
- 19. 在C#中编写excel 2007二进制文件的问题
- 20. 二进制问题==
- 21. 编写:: UndefinedConversionError编写二进制文件
- 22. 写的字符串二进制数据的二进制文件
- 23. 写入二进制文件在C++
- 24. 在Ruby中写入二进制文件
- 25. VB - 如何读写二进制文件?
- 26. 用matlab编写multiprecision二进制文件
- 27. PHP编写的二进制文件
- 28. 将位写入二进制文件
- 29. 在TideSDK中写入二进制文件
- 30. 在Delphi中编写二进制文件
'TFileStream'原始数据(字节),而不是字符串,所以你的'Ansi'与'Unicode'问题是没有意味着明显或通常。你应该在你的问题中包含一些代码。 – 2011-06-10 18:09:55
用'fmOpenReadWrite'或'fmCreate'打开'TFileStream',你可以阅读也可以书写。你也需要寻求。既然你没有给出任何代码,那么很难说更多。 – 2011-06-10 19:11:32