易码技术论坛

 找回密码
 加入易码
搜索
查看: 115239|回复: 9

[求助]关于lava文件读写错误

[复制链接]
发表于 2005-8-14 14:49:00 | 显示全部楼层
代码?
 楼主| 发表于 2005-8-14 14:50:00 | 显示全部楼层

int fp;
fp=fopen("/LavaData/tmp.dat","rb+");
fseek(fp, HEADER_LENGTH + DATA_LENGTH * RecordID), SEEK_SET);
putc(A1, fp); putc(A2, fp); ...  putc(An, fp);
fwrite(&B1, 1, 2, fp); fwrite(&B2, 1, 2, fp); ... fwrite(&Bn, 1, 2, fp);
fclose(fp);

Ai与Bi都是独立变量,不是数组。如果是数组就容易多了,真用fwrite写数组时似乎没出过什么问题。
改变RecordID写数据,大约是在2048个字节之后出现问题(全变成0xFF).
 楼主| 发表于 2005-8-14 14:54:00 | 显示全部楼层
Ai是char,Bi是int.类似这样的代码在IDE上运行从来没出过问题,到wqx上就不一样了。
发表于 2005-8-15 01:24:00 | 显示全部楼层
offset:0 文件开头位置 1 当前位置 2 文件结束位置
发表于 2005-8-14 18:46:00 | 显示全部楼层
无法从根本上解决..(lee用6502重写星星端Lava解释器的可能性不大..)
MrBlackOx写得pacmanger里似乎避免了此问题的发生....
但是我没有pacmanger的源代码..也不知道MrBlackOx死这么解决这问题的..

有空帮你问问..
发表于 2005-8-14 19:19:00 | 显示全部楼层
貌似fwrite必须从偏移0开始写,或者写的地址不能小于文件大小。
是不是这个原因啊……程序么仔细看。
发表于 2005-8-15 16:22:00 | 显示全部楼层
我也遇到过类似的问题,问LEE,他说是wqx的问题
pacmanger好像是按16K为单位读写的(即一次读写16K)
另外,MrBlackOx说过通过读末尾数据再写回的方法来解决这个问题(见最近一期ed)
发表于 2005-8-18 10:46:00 | 显示全部楼层
看起来像是flash中的某一个page(512b) 弄丢了~~~
 楼主| 发表于 2005-8-21 15:43:00 | 显示全部楼层
感谢各位的无私帮助!利用ED中提供的方法这个问题被解决了。
fseek(fp, -1, SEEK_END); c=getc(fp); fseek(fp, -1, SEEK_END); putc(c, fp);
 楼主| 发表于 2005-8-14 14:40:19 | 显示全部楼层 |阅读模式
a serious problem...
用rb+方式打开二进制文件,fseek定位后用putc、fwrite混合写数据,很容易出现512(或倍数)字节后的文件出现错误(即使没有对这一部分数据进行操作,原有的数据全部被0xFF替换)。如果再去读出现错误的部分,得到的全是0xFF。同样的代码只在wqx上出问题,并且类似的问题从来没有在IDE中出现过。谁遇到过这类问题,怎么解决的?谢谢各位了!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-30 08:45 , Processed in 0.012706 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表