c - 从使用追加模式打开的文件中读取

标签 c file fopen fseek

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

最佳答案

只有一个指针,最初位于文件的开头,但当尝试执行写入操作时,它会移至文件的末尾。您可以使用 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)

希望有帮助..

关于c - 从使用追加模式打开的文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15826010/

相关文章:

c - Xcode调试C语言出现错误: EXC_BAD_ACCESS (code=1)

r - 如何将原始数据包含在 R 包中

php - 使用 PHP 下载 csv 文件

像 __TIME__ 这样的 C++ 预处理器指令有时不会改变/不会更新

c - 如何在保留虚拟地址范围的同时释放内存?

c - 用于查找文本文件大小的小片段

c++ - 如何从 ASCII 文本文件中读取(小)整数到 C++ 中足够的数据数组

java - 如何从 Windows 共享位置读取文件? ( java )

c - 为什么 fopen_s 在打开文件进行读取时返回 EEXIST (errno 17)

c - 输入 fget 时检测到堆栈崩溃