我试图覆盖二进制文件中的单个字节.我fseek()用来将流位置指示器设置为我要覆盖的字节.然后我打电话给fwrite()那个位置的新字节.不知何故文件中的其他字节正在受到影响.下面是一些代码:
bool x = 1;
bool y = 0;
bool z = 1;
/* WRITE 101 to file */
FILE *ff = fopen(file, "wb");
fwrite(&x, sizeof(x), 1, ff);
fwrite(&y, sizeof(y), 1, ff);
fwrite(&z, sizeof(y), 1, ff);
fclose(ff);
bool x_r, y_r, z_r;
/* READ from file */
ff = fopen(file, "rb");
fread(&x_r, sizeof(x_r), 1, ff);
fread(&y_r, sizeof(y_r), 1, ff);
fread(&z_r, sizeof(z_r), 1, ff);
fclose(ff);
/* PRINT to standard output */
cout << x_r << y_r << z_r << endl; // OUTPUT: 101
bool overwrite = 1;
/* OVERWRITE */
ff = fopen(file, "wb");
fseek(ff, 1, SEEK_SET);
fwrite(&overwrite, sizeof(overwrite),1 , ff);
fclose(ff);
/* READ from file */
ff = fopen(file, "rb");
fread(&x_r, sizeof(x_r), 1, ff);
fread(&y_r, sizeof(y_r), 1, ff);
fread(&z_r, sizeof(z_r), 1, ff);
fclose(ff);
/* PRINT to standard output */
cout << x_r << y_r << z_r << endl; // OUPUT 011; I was expecting 111
Run Code Online (Sandbox Code Playgroud)
上面的代码基本上将三个字节的数据写入文件.101.然后我使用fseek()设置重新定位流指示器以指向第二个字节.但是调用fwrite()来覆盖从0到1的第二个字节也会改变第一个字节.预期的输出是111,但我得到011.
任何想法为什么会这样?我也尝试了putc,但这也没有用.任何帮助,将不胜感激.
"r +"模式打开文件进行读写,但保留其内容.