fseek 在"a"(追加)模式下打开文件时不起作用
fseek does not work when file is opened in "a" (append) mode
FILE* f = fopen("rajat", "w");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);
成功返回:"someteis a"
但
FILE* f = fopen("rajat", "a");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);
不工作。返回"sometextis a"
知道为什么吗?解决方案是什么,以便第二个代码输出与第一个代码完全相同?
在追加模式下打开时,文件指针会在每次写入之前返回到文件末尾。您可以使用 fseek
重新定位指针以进行读取,但只要调用写入文件的函数,指针就会返回到文件的末尾。
或者,换句话说,为了防止数据丢失,"写入指针"的位置会覆盖"读取指针"的位置。任何追加后,写入指针都会反弹到新EOF
。
此链接中的答案引用了 C 标准的相应部分。
如果要写入文件中的任意位置,请使用"w+"
模式。现有文件将被覆盖。
如果最初要追加到现有文件,但后来fseek
到任意位置,请使用 "r+"
后跟 fseek(f, 0, SEEK_END)
。
相关文章:
- SFML 加载从文件不起作用,奇怪的错误
- 为什么写入文件不起作用
- Opencv ml 头文件不起作用
- 将数组保存到二进制文件不起作用 c++
- C++输出流到文件不起作用
- 使用 bazel 构建 TensorFlow C++调用模型时,.so 文件不起作用
- C++接口(标头)和实现文件不起作用
- 二进制文件:ios ::二进制文件不起作用
- 解密AES-256加密文件不起作用
- MinGW .h 编译文件不起作用:此文件的版本与您运行的 Windows 版本不兼容
- 在 Linux 中使用 C++ 列出目录的所有文件不起作用
- 以二进制模式写入文件不起作用
- Android NDK 中的某些 c++ 包含文件不起作用
- 通过 Makefile 编译 2 个文件不起作用
- 标头和源类文件不起作用
- 线程清理器的抑制文件不起作用:出了什么问题
- 我的生成文件不起作用
- c++fileIO创建/打开文件不起作用
- C++ 使用文件不起作用初学者
- 在QtCreator中逐行读取文本文件不起作用