0

当我以编程方式生成文本文件时,是否应该在文件末尾插入 ASCII EOF 标记(十进制值 26)?

.NET 编程语言会自动执行此操作吗?

4

2 回答 2

5

不会。EOF 是由操作系统的 IO 函数在读取文件时产生的。它不应该存储在现代系统的文件中。

于 2009-06-26T00:33:04.470 回答
2

不再有标记的理由^Z EOF(并且已经很久没有了) - 这是 CP/M 的保留,它不支持目录中文件大小的确切长度 - 文件大小是根据数量128 字节块,因此要在非 128 字节边界上结束文件,您必须使用 EOF 字符。

由于早期版本的 MS-DOS 深受 CP/M 的影响(而且微软希望 CP/M 程序能够轻松移植),因此约定被卡住了。

您的程序应打开具有适当属性的文本文件,以便操作系统和/或语言运行时在看到 a 时发出 EOF 信号^Z,以防您遇到使用该约定的文件。但是没有必要再写一篇了。

一个可能的例外是,如果您有一个二进制文件,但想在它的开头放置一些文本,然后是 a ^Z,然后是您的数据。如果有人将它转储到控制台,它会说一些聪明的东西,而不是吐出垃圾。没有太多理由这样做,但我很少看到这样做。

来自维基百科(http://en.wikipedia.org/wiki/CP/M):

文件大小指定为磁盘上一个文件占用的 128 字节记录数(直接对应于 8 英寸驱动器上的磁盘扇区)。没有普遍支持的指定字节精确文件大小的方法。文件的当前大小由操作系统保存在文件的文件控制块 (FCB) 中。由于许多应用程序(例如文本编辑器)更喜欢将文件作为字符序列而不是记录序列来处理,因此按照惯例,文本文件以 control-Z 字符(ASCII SUB,十六进制 1A)终止。因此,确定文本文件的结尾涉及检查文件的最后一条记录以定位终止控件-Z。

于 2009-06-26T02:08:41.733 回答