是否可以在同一文件上交替写入二进制和常规写入?
我是否只需要像这样继续打开和关闭文件?
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/