【问题标题】:How do I distinguish between an EOF character, and the actual end of file?如何区分 EOF 字符和文件的实际结尾?
【发布时间】:2012-02-01 05:16:51
【问题描述】:

在读取文件时,我知道提供的最后一个字符是 EOF。现在,当我在该文件中有一个 EOF 字符时会发生什么?

如何区分文件的“真实”结尾和EOF 字符?

【问题讨论】:

  • 不能在文件中包含“EOF 字符”。没有这种事
  • 在 DOS 中有,在 Windows 中仍然可以。 Ctrl-Z,或 ASCII 值 26。仍然生成带有EOF 字符的文件的此类应用程序之一是来自 The Analytical Group 的名为 WinQuery 的产品。

标签: eof


【解决方案1】:

我决定将我的 cmets 移至答案。

不能在您的文件中包含“EOF 字符”,因为没有这样的东西。底层文件系统知道文件中有多少字节;它不依赖文件的内容来知道结尾在哪里。

您正在使用的 C 函数返回 EOF (-1) 但这不是从文件中读取的。这只是函数告诉您已到达终点的方式。而且因为 -1 在任何字符集中都不是有效字符,所以没有混淆。

【讨论】:

    【解决方案2】:

    这个问题你需要一些上下文。在 Windows 上,有一个过时的 DOS 概念,即真正的“EOF 字符”——Ctrl-Z。实际上不可能区分“真”和“假”。从程序的角度来看,嵌入了 Ctrl-Z 的文件将包含一些尾随隐藏数据,该程序实际上正在寻找 Ctrl-Z 作为文件结尾字符。不要再尝试编写这种代码了——没有必要。

    在可移植 C API 和 UNIX 上,32 位 -1 用于指示文件结束,不能是有效的 8 位或 16 位字符,因此很容易区分。

    【讨论】:

    • 呃,好吧,我似乎混淆了EOFEOT,我认为这基本上是同一回事。 Ctrl + D 通常被称为“文件结束”。
    【解决方案3】:

    假设您在谈论 C,EOF 是 -1,它不是字符(因此不会混淆)。

    【讨论】:

    • 那么,当我将EOF 字符放入文件时,它不会注册为文件结尾?
    • A char 是一个字节(8 位值),而 EOF 是一个整数。没有 EOF 字符这样的东西,因此您不能将其放入文件中。
    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2011-05-20
    • 2013-05-24
    • 2019-07-24
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多