【问题标题】:Delphi open files with streamsDelphi用流打开文件
【发布时间】:2017-08-10 12:28:17
【问题描述】:

几天前我问过this 有人告诉我使用TFileStream 的问题。我正在阅读 Głowacki 的 Expert Delphi,他使用 TStreamReader/TStreamWriter。在评论中我读到了这个:

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

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

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

我是新手,我不太了解我在网上找到的专家主题。据我了解,TFileStream 用于二进制文件,TStreamReader 用于内部包含一些文本的文件

【问题讨论】:

  • 对于二进制文件,您可以使用 TBinaryReaderTBinaryWriter 辅助类。
  • @Victoria 谢谢 :) 事实是我看到很多可以用来读取文件的类,我不知道如何选择正确的
  • 那些类只是帮手。它们可以帮助您存储和阅读您想要的内容。例如TStreamWriter 参考说明了它的用途“写入字符流。” 如果您不想只写入字符,请不要使用它。 TBinaryWriter “使用 TBinaryWriter 将原始数据类型作为特定编码中的二进制值写入流。” 所以如果你想写例如整数(甚至是字符串),它可以帮助你...
  • 您可以使用TFileStream 写入和读取的任何数据。只是语法的可读性不如那些助手。但可能更有效,因为与那些帮助类不同,使用 TFileStream 您可以编写和阅读例如一个整数数组。
  • 数字不一定是文本。你不清楚你的意图。如果用户在记事本等文本编辑器中打开文件,这些数字是否可以读取?如果是这样,您正在编写文本。如果没有,你写二进制。二进制文件包含的信息对看到它的人没有意义,但对软件有意义(如图像文件、可执行文件、设计用于应用程序的数据文件或 Word 文档) )。如果您要使用的类要求编码,它是文本。二进制文件没有该选项。这应该有助于使其更清晰。

标签: delphi


【解决方案1】:

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

它们包含许多字节,人类或软件如何解释这些字节使它们很有用。

但如果术语 textbinary 是对立的,那么 text 意味着(或多或少)任何人类可读的东西,例如回答,而 binary 表示任何非文本。

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

TextWriter 将文本写入流。 TBinaryWriter 写入数据,因为它存储在内存中。两者都可以使用任何类型的流,可以是 TFileStreamTMemoryStream 来写入(或读取)。流表示文件或其他可写介质。

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

【讨论】:

  • 谢谢 Rudy 我明白了 ;) 你没有让我感到困惑我明白所有文件都是二进制文件。你的回答清除了我的想法
猜你喜欢
  • 2020-03-15
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多