c - 在同一个文件上交替使用 fwrite 和 fprintf

标签 c file-io bin

是否可以在同一文件上交替写入二进制和常规写入?

我是否只需要像这样继续打开和关闭文件?

struct node x;
FILE* fout;
fout = fopen("output.bin", "wb");
fwrite(&x, sizeof(struct node), 1, fout);
fclose(fout);
fout = fopen("output.bin", "a");
fprintf("&d", x.data);

最佳答案

就 POSIX 系统上的混合而言:这两个都是同一个库中的缓冲 stdio 例程,在 POSIX (UNIX/Linux/Solaris/BSD) 操作系统上,二进制模式和文本模式之间没有区别,所以你确实可以混合它们。

通常 fprintf 会在每个换行符后触发刷新,所以只要您不将 fprintf/fwrite 与直接 write() 混合使用,您应该没问题。

关于Windows:fopen支持“b”模式,确实有区别。如果文件以文本模式打开,fseek 将限于开始或当前文件指针。我不想假装知道在二进制模式下使用 fprintf() 是否会有任何陷阱,所以如果您担心 Windows,我建议您检查以前的 SO 线程。

Difference between files writen in binary and text mode

通常情况下,如果我需要将格式化输出与二进制文件混合,我会先使用 sprintf() 或其他内存机制写入缓冲区,然后使用 fwrite() 批量写入(刷新)缓冲数据。

关于c - 在同一个文件上交替使用 fwrite 和 fprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569311/

相关文章:

c - 关于检查字符串中的数字

c++ - 无法为整数生成全范围的随机数

python - 在 python 中读取大文本文件会随着迭代变慢

python - 如何在直方图上设置轴并交换 x 轴和 y 轴?

c# - 为全息图 3D 风扇将视频转换为 .bin

未创建 Android APK 文件和 DEX 文件,没有警告或错误

c - 这个语句在 C 程序中意味着什么? "While (scanf ("%d", &t) ==1)"为什么我应该在 while 循环中编写程序的其余部分?

c - 具有带符号整数位字段的结构产生负输出

c++ - 将结构转换为字符数组

c++ - 使用 fstream 从 C++ 中的 *.txt 文件中读取数字