这可能是一个非常愚蠢的问题,但我正在修改其他人的代码,似乎我需要从以追加模式打开的文件中读取。我试着fseek
到文件的开头,但没有读到任何内容。
我知道我可以将模式更改为rw,但我想知道为什么fseek
无效。在手册页中它确实说写忽略fseek
但是没有关于读取的内容。
答案 0 :(得分: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)
希望有所帮助......