当前位置:编程学习 > C#/ASP.NET >>

诧异的fread fwrite fseek文件操作

环境:vs2005
water.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。改用其它方法吧。 --------------------编程问答--------------------
引用 1 楼 cnzdgs 的回复:
恭喜,你发现了VC运行库的一个bug。改用其它方法吧。
--------------------编程问答-------------------- 不可以直接对位bit操作,因为你没有区别有符号与无符号数,于是就有可能很小的负数跃变成很大的正数.
--------------------编程问答-------------------- 应该是使用sizeof(char)来对byte操作。 --------------------编程问答--------------------
引用 4 楼 job82824 的回复:
应该是使用sizeof(char)来对byte操作。


好久没上线了,,请问你实现了你的方法吗?
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,