【问题标题】:Reading from a file opened using append mode从使用附加模式打开的文件中读取
【发布时间】:2013-04-05 04:38:46
【问题描述】:

这可能是一个非常愚蠢的问题,但我正在修改其他人的代码,看来我需要从以附加模式打开的文件中读取。我试图fseek 到文件的开头,但没有读取任何内容。 我知道我可以将模式更改为 rw,但我想知道为什么 fseek 不起作用。在手册页中确实说 write ignores fseek 但没有任何关于 read 的内容。

【问题讨论】:

  • 好吧 append 是一种写作形式,所以它不会让你去寻找。
  • 那么这是否意味着 fread 将始终返回读取的 0 字节?

标签: c file fopen fseek


【解决方案1】:

只有一个指针最初位于文件的开头,但当尝试写入操作时,它会移动到文件的末尾。您可以使用 fseek 重新定位它或在文件中的任何位置倒带以进行读取,但写入操作会将其移回文件末尾。

当您以追加模式打开时,文件指针会在每次写入之前返回到文件末尾。您可以使用 fseek 重新定位指针以进行读取,但是一旦您调用写入文件的函数,指针就会回到文件末尾。

Does fseek() move the file pointer to the beginning of the file if it was opened in "a+b" mode? 的答案引用了 C 标准的相应部分。

如果您想写入文件中的任意位置,请使用“w+”模式。现有文件将被覆盖。

如果您想先附加到现有文件,但随后 fseek 到任意位置,请使用“r+”,后跟

fseek(f, 0, SEEK_END)

希望对你有帮助..

【讨论】:

  • 谢谢!在阅读之前 fseek 到文件的开头似乎没有为我阅读任何内容。不知道为什么。
  • fseek(f, 0, SEEK_END) 不保证将文件位置设置在文件末尾。见标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
相关资源
最近更新 更多