2017-08-10 245 views
2

打开的文件,我问过一些天前this问题中,人们告诉我使用TFileStream。我正在阅读Głowacki的Expert Delphi,他使用TStreamReader/TStreamWriter。在评论中,我读到:德尔福与流

TStreamReader是一个用于读取文本数据的助手类。你的文件是 不是文本,它是二进制的。直接使用TFileStream代替

我对此有点麻烦。据我所知,一个binary文件不包含文本和TFileStream我可以读取二进制文件(如文档所述)。假设我想用TStreamWriter在文件上输出一系列数字,然后读取此文件的内容。我是否允许用TFileStream来做到这一点?

我看到TStreamWriter是在构造函数中TEncoding所以我需要指定UTF-8或ANSI例如。这会影响文件的结构吗?

我的新本,我真的不明白专家主题,我在网上找到。从我了解TFileStream的是二进制文件,TStreamReader是具有内部

+0

对于二进制文件,您可以使用[TBinaryReader](http://docwiki.embarcadero.com/Libraries/en/System.Classes.TBinaryReader)和[TBinaryWriter](http://docwiki.embarcadero.com/Libraries/ en/System.Classes.TBinaryWriter)辅助类。 – Victoria

+0

@维多利亚谢谢:)事实是,我看到很多类可以用来读取文件,我不知道如何选择正确的一个 –

+0

这些类只是帮手。他们帮助你存储和阅读你想要的东西。例如[TStreamWriter](http://docwiki.embarcadero.com/Libraries/en/System.Classes.TStreamWriter)引用说明了它的用途_“用于字符串流的编写器。”_如果您不想仅写入字符,不要使用它。 [TBinaryWriter](http://docwiki.embarcadero.com/Libraries/en/System.Classes。TBinaryWriter)_“使用TBinaryWriter将原始数据类型作为特定编码中的二进制值写入流中。”_因此,如果要编写例如整数(甚至是字符串),它可以帮助你... – Victoria

回答

6

不是想迷惑你一些文本文件,但实际上所有的文件都是二进制。

它们包含的字节数,以及如何将这些字节由人类解释或软件,使它们非常有用。

但如果条件文本二进制都反对,然后文本手段(或多或少)任何是人类可读的,像这样的答案,而二进制意味着什么,是不是文字。

一个例子:在当前的Delphi版本中,整数由四个字节组成。如果将这些字节直接存储到文件中,那么您正在编写二进制文件。如果您将文本形式(例如-172423423)写为字符,则您正在编写文本。

一个TextWriter到流写入文本。当数据存储在内存中时,数据将被写入TBinaryWriter。两者都可以使用任何类型的流,无论是TFileStream还是TMemoryStream都可以写入(或读取)。该流表示文件或其他可写介质。

现在,文本可以有许多编码,例如, UTF-8,几个Ansi代码页等。这意味着不在#0..#127范围内的“字符”编码方式不同。这当然可以改变文件的确切内容。

+0

感谢鲁迪我已经理解;)你没有混淆我我已经了解到所有文件都是二进制文件。你的回答清除了我的想法 –