如何修改二进制文件的部分内容?

tianshimeng724 2009-08-18 11:11:17
二进制文件里按顺序写进了
struct A{
EAINT a;
}
struct B{
EAINT a;
EAINT a;
}
现在我想把文件中的struct A的a值赋值为1000,怎么办?
我的主要代码:
FILE* file= fopen( "D:\\temp.pc", "rb+" );
A *ss= (A*)calloc( 1, sizeof(A) );
fread( ss, sizeof(A), 1, file);
ss->a= 1000;
fwrite(ss,sizeof(A),1,file);

B的内容没了,我只是想把文件中的struct A的a值赋值为1000,文件其他部分的不变,怎么改?新手,请帮忙,谢谢
...全文
221 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天御剑流 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 tianshimeng724 的回复:]
二进制文件里按顺序写进了
struct A{
EAINT a;
}
struct B{
EAINT a;
EAINT a;
}
现在我想把文件中的struct A的a值赋值为1000,怎么办?
我的主要代码:
FILE* file= fopen( "D:\\temp.pc", "rb+" );
A *ss= (A*)calloc( 1, sizeof(A) );
fread( ss, sizeof(A), 1, file);
ss->a= 1000;
fwrite(ss,sizeof(A),1,file);

B的内容没了,我只是想把文件中的struct A的a值赋值为1000,文件其他部分的不变,怎么改?新手,请帮忙,谢谢
[/Quote]

你写入了a后,文件内部指针指向了a后面了内容了,你没有把该指针回复到a开头的位置就写了,当然b的内容没了,代码改为这样:

fread( ss, sizeof(A), 1, file);
ss->a= 1000;
fseek( file, -sizeof( A ), SEEK_CUR ); //恢复文件内部指针到a的开始位置
fwrite(ss,sizeof(A),1,file);


还有一点需要提醒的是, 对于可读可写流,标准规定,在每一次读或写之后,不能紧接着进行下一次写或读,应该先刷新一下缓冲再进行,否则有可能会出现意料不到的情况。刷新的方法可以用fseek、rewind、fflush等等。
liangyonglou 2009-08-18
  • 打赏
  • 举报
回复
定义一个同样的结构
struct b{
EAINT a;
}
struct B{
EAINT a;
EAINT a;
} sa;

然后 sa->a=1000;
在然后把 里面的小结构原封不动的复制,在写文件,就可以了!

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧