诧异的fread fwrite fseek文件操作
环境:vs2005water.txt文件内容为:
1234567890123456789
预期效果:
打开文件,对字符操作同时将更改了的字符写回完来的位置。
void CprotxtDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
BYTE p;
if((fii=fopen("G:\\Visual Studio 2005\\Projects\\protxt\\protxt\\water.txt","rb+"))==NULL)
MessageBox("wrong2");
for(int i=0;i<5;i++)
{
fread(&p,1,1,fii);
p=p^1;
fseek(fii,-1,SEEK_CUR);
fwrite(&p,1,1,fii);
//如第一个字符为'1',操作后变'0',那water.txt文件内容变为0234567890123456789(仅一次循环)
}
MessageBox("success!");
fclose(fii);
}
输出结果:water.txt内容 0333367890123456789
HELP!!!!!!!!!!!!!
--------------------编程问答-------------------- 恭喜,你发现了VC运行库的一个bug。改用其它方法吧。 --------------------编程问答-------------------- --------------------编程问答-------------------- 不可以直接对位bit操作,因为你没有区别有符号与无符号数,于是就有可能很小的负数跃变成很大的正数.
--------------------编程问答-------------------- 应该是使用sizeof(char)来对byte操作。 --------------------编程问答--------------------
好久没上线了,,请问你实现了你的方法吗?
补充:.NET技术 , VC.NET