是否可以在同一文件上交替写入二进制和常规写入?
我是否需要像这样继续打开和关闭文件?
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);
答案 0 :(得分:0)
在POSIX系统上混合:这两个都是同一个库中的缓冲stdio例程,而在POSIX(UNIX / Linux / Solaris / BSD)操作系统上,二进制和文本模式之间没有区别,所以你确实可以混合它们。
通常fprintf会在每个换行符后触发刷新,因此只要您不将fprintf/fwrite
与直接write()
混合,就可以了。
关于Windows:fopen支持“b”模式,确实存在差异。如果文件在文本模式下打开,则fseek将仅限于开头或当前文件指针。我不假装知道在二进制模式下使用fprintf()是否会有任何陷阱,所以我建议你检查以前的SO线程,如果你担心Windows。
Difference between files writen in binary and text mode
通常如果我需要将格式化输出与二进制混合,我首先使用sprintf()或其他内存机制写入缓冲区,然后使用fwrite()批量写入(刷新)缓冲数据。