【问题标题】:rewind(file pointer) and then fwrite. Won't fwrite overwrite the file contents? C倒带(文件指针),然后 fwrite。 fwrite 不会覆盖文件内容吗? C
【发布时间】:2011-03-11 06:26:54
【问题描述】:

我是在某个地方发现的。

正在写入一个文件,然后 rewind(fileptr) 完成,然后写入应该写入文件开头的内容。但是一开始写,不会覆盖文件内容吗?请指教。

【问题讨论】:

  • 可能是的,但是您应该发布您的代码,以便我们看到您在说什么。

标签: c file fwrite overwrite seek


【解决方案1】:

从技术上讲,是的

是的,文件将被覆盖,但仅限于写入的长度。如果文件比较长,大部分情况下(主流系统上的普通文件)剩余字节不变。

但是,您实际上可能想知道此时文件是否会被截断:通常(相同情况)不会。从技术上讲,截断对于文本文件是实现定义的,对于二进制文件是no

如果现代系统甚至 具有文本与二进制的区别,我会感到惊讶,当然 Unix、Linux 和 BSD 系统没有,我怀疑 实现-定义的黄鼠狼词被用于一些现已退役的化石。如果是这样,那么在所有重要的情况下,剩余的字节将保持不变并且文件不会被截断。

现在,文件 API 用于许多未实现文件抽象的完整列表的事物:想想 UDP 套接字、终端、磁带驱动器、用于非存储硬件的随机控制器等。至少可以说,甚至使用缓冲的 I/O 包来编写这样的通道,但也许它们是规范中存在差距的原因。

【讨论】:

  • 除非文件以追加模式打开,在这种情况下rewind 移动文件位置,然后fwrite 无论如何都会写入文件末尾。从问题看来,这里的情况似乎并非如此(“应该写入文件开头的内容”),我只是为了完整性而提及它。
  • 嘿,好点子,我们一起将几乎所有技术细节都击败了...... [-插入血腥比喻-]
  • 请注意,POSIX 要求二进制和文本模式相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多