当我以编程方式生成文本文件时,是否应该在文件末尾插入ASCII EOF标记(十进制值26)?
.NET编程语言是否自动执行此操作?
答案 0 :(得分:5)
没有。 EOF是在读取文件时由OS的IO功能产生的。它不应存储在现代系统的文件中。
答案 1 :(得分:2)
^Z
EOF
标记没有理由(并且已经很久没有了) - 它是CP / M的保留,它不支持文件大小的确切长度在目录中 - 文件大小是以128字节块的数量表示的,因此要在非128字节边界上结束文件,您必须使用EOF字符。
由于MS-DOS的早期版本受到CP / M的严重影响(并且微软希望CP / M程序能够轻松移植),因此会议陷入困境。
您的程序应该打开具有相应属性的文本文件,以便操作系统和/或语言运行时在看到^Z
时发出EOF信号,以防您遇到使用该约定的文件。但是没有必要再写一个了。
一个可能的例外是,如果你有一个二进制文件,但想要在它的开头添加一些文本,然后是^Z
,那么你的数据。如果有人将它转储到控制台,它会说出一些智能而不是喷出垃圾的东西。这样做没有太多理由,但我很少见到这一点。
来自维基百科(http://en.wikipedia.org/wiki/CP/M):
文件大小指定为数字 128字节记录(直接 对应于磁盘扇区 8英寸驱动器)由文件占用 磁盘。一般没有 支持指定byte-exact的方法 文件大小。文件的当前大小 保存在文件的文件中 控制块(FCB)由操作 系统。由于很多申请 程序(如文本编辑器)更喜欢 处理文件作为序列 字符而不是序列 记录,按惯例文本文件 以control-Z字符终止 (ASCII SUB,十六进制1A)。 确定文本文件的结尾 因此涉及检查最后一个 要找到的文件的记录 终止控制-Z。这也意味着 插入一个control-Z字符 通常有一个文件的中间 截断文本的效果 文件的内容。