【发布时间】:2011-03-11 06:26:54
【问题描述】:
我是在某个地方发现的。
正在写入一个文件,然后 rewind(fileptr) 完成,然后写入应该写入文件开头的内容。但是一开始写,不会覆盖文件内容吗?请指教。
【问题讨论】:
-
可能是的,但是您应该发布您的代码,以便我们看到您在说什么。
标签: c file fwrite overwrite seek
我是在某个地方发现的。
正在写入一个文件,然后 rewind(fileptr) 完成,然后写入应该写入文件开头的内容。但是一开始写,不会覆盖文件内容吗?请指教。
【问题讨论】:
标签: c file fwrite overwrite seek
是的,文件将被覆盖,但仅限于写入的长度。如果文件比较长,大部分情况下(主流系统上的普通文件)剩余字节不变。
但是,您实际上可能想知道此时文件是否会被截断:通常(相同情况)不会。从技术上讲,截断对于文本文件是实现定义的,对于二进制文件是no。
如果现代系统甚至 具有文本与二进制的区别,我会感到惊讶,当然 Unix、Linux 和 BSD 系统没有,我怀疑 实现-定义的黄鼠狼词被用于一些现已退役的化石。如果是这样,那么在所有重要的情况下,剩余的字节将保持不变并且文件不会被截断。
现在,文件 API 用于许多未实现文件抽象的完整列表的事物:想想 UDP 套接字、终端、磁带驱动器、用于非存储硬件的随机控制器等。至少可以说,甚至使用缓冲的 I/O 包来编写这样的通道,但也许它们是规范中存在差距的原因。
【讨论】:
rewind 移动文件位置,然后fwrite 无论如何都会写入文件末尾。从问题看来,这里的情况似乎并非如此(“应该写入文件开头的内容”),我只是为了完整性而提及它。