c语言fwrite写文件失败

先说一下我的需求:有2个bin文件,需要把ok.bin的0x210000开始长度为0x10000的值copy到bad.bin中的同样的位置去。在往bad.bin中写的过程... 先说一下我的需求:有2个bin文件,需要把ok.bin的0x210000开始长度为0x10000的值copy到bad.bin中的同样的位置去。在往bad.bin中写的过程中失败,没有写成功,我试了一下,如果把rb+改成wb+是可以写的,但是会把bad.bin清空。下面是我写的程序,还没有加循环,只是写0x210000位置的一个byte,但是没成功,应该是文件指针有问题。用的是VS2008。新手求帮助!谢谢!

#include <stdio.h>
int main()
{
FILE* pokfile,*pbadfile;
char ch,*OKfilename = "d:\\OK.bin";
char *Badfilename = "d:\\bad.bin";
// double n = 0x210000;

pokfile = fopen(OKfilename, "rb+");
pbadfile = fopen(Badfilename,"rb+");
if(pokfile == NULL || pbadfile == NULL)
printf("ERROR: Open file not success. \n ");

fseek(pokfile, 0x210000, SEEK_CUR);
fread(&ch,1,1,pokfile);
//printf("ch = %x \n",ch); //comfirm ch is the right data;

fseek(pbadfile,0x210000,SEEK_CUR);
fwrite(&ch, 1, 1, pbadfile);

fclose(pbadfile);
fclose(pokfile);
return 0;
}
--------------------------------------追问-------------------------------------------------------
我不知道我的VS2008出了什么问题,在调试的时候发现pokfile这个指针是对的,但是pbadfile这个指针是空的,但是程序还能运行结束,结果也是对的,很怪。

另外,这循环该怎么写呢?我要循环0x10000次

---------------------------------------追问----------------------------------------------------------

我自己写好了,验证ok,分给那位码字多的了,辛苦了
展开
 我来答
苦涩无人爱
推荐于2016-11-12 · TA获得超过221个赞
知道小有建树答主
回答量:86
采纳率:100%
帮助的人:57.9万
展开全部
FILE *fp;
fp=fopen("绝对路径","w");
if(fp==NULL)
{
perror("fopen");
}
fwrite(,,,fp);
如果出错,请先看报错时fopen出现的信息,是不是不存在文件或段的意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
2015-10-31 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:897万
展开全部
fwrite 操作后会把文件指针位置 向后 移动size*count字节。接着再fwrite就从这个当前位置起写。

while循环里,例如读1个结构,写一个结构,一直到读到 文件结束符 EOF为止。

这种写法有没有必要看情况决定。例如,一个结构就是一个学生的成绩单,但一开始并不知道文件里一共有多少学生,那么用这种循环读的方法,就可以计数,可以动态分配单元。
计数器初始化为0。成功读入1个结构,就把计数器加1。直到fread()失败--返回EOF。

int c=fread(xxx, 10,10, fp), c有没有可能<100但是>0。 有可能。所以可以 通过 c 是否等于 100
来判断 是否成功,是否合理, 并采取措施。
例如,有一个题目,是读入1个文件,平均地拆成3个文件输出,再读入这3个文件,合成1个文件。
因为文件的字节总数,未必是3 的倍数,所以 想读的个数和真正读到的个数就有可能不同。要使拆开的文件再合起来,与原文件一模一样,就要用到c。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
感情4757
2013-09-11
知道答主
回答量:87
采纳率:0%
帮助的人:21万
展开全部
描述 清楚一些,文件是否存在 文件打开是否正确 是否有写权限
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
岁月流金0000
2015-11-20 · 超过23用户采纳过TA的回答
知道答主
回答量:56
采纳率:100%
帮助的人:31.3万
展开全部
strerr和errorno结合,可以查出原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旅春冬TJ
推荐于2017-12-16 · TA获得超过1082个赞
知道大有可为答主
回答量:1271
采纳率:66%
帮助的人:509万
展开全部
这个程序原则意义上是没有问题的,可能存在的错误有以下几点:
一、欲读取的文件没有那么多数据,也就是说你想要读取的文件没有大到0x210000有数据,所以导致不能成功。
二、采用rb+的方式写入文件(以更新方式打开(读写))。这个也是没有问题的。但是要求以此种方式打开的文件必须存在,也就是说你必须在运行这个程序之前把这个文件建好。
三、采用上述的方式写入到0x210000位置时,如果文件的是空的,那么程序会在文件的0x210000地址之前填充0.
所有可能的问题就上述这些,我自己运行过这个程序,在解决好上面的问题之后,程序没有出错,因此,可以尝试把这个地址调小一点。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式