首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

struct 文件流函数fwrite写入出错(急100分,)

2012-03-20 
struct 文件流函数fwrite写入出错(急,100分,在线等)原来的代码太多,找了一个相似的例子:intmain(){charstr

struct 文件流函数fwrite写入出错(急,100分,在线等)
原来的代码太多,找了一个相似的例子:
int   main()
{
                char   str[2000];
                FILE   *   fp;
                int   i,j;
                fp=fopen( "./meta.dat ", "wb ");
                if(fp=NULL)
                {
                                printf( "open   meta.dat   failed\n ");
                                return   -1;
                }
                struct   hashTable   *   ht   =   (struct   hashTable   *)malloc(sizeof(struct   hashTable));
                ht-> count   =   0;
                ht-> next   =   NULL;
                ht-> AnodeType=   lh_strhash(str);
                struct   hashTable   *   list;
                memset(str,0,sizeof(str));
                strcat(str, "ab ");
                for(i=1;   i <11;   i++)
                {                
                                for(j   =   0;j <10;   j++)
                                {
                                                hashTableInsert(str,   (unsigned   int)(i*100+j),   ht);
                                }
                                strcat(str, "ab ");
                }
                list   =   ht-> next;
               
                for(;   list-> next!=NULL;list=list-> next)
                {
                                fwrite(list,sizeof(struct   hashTable),1,fp);                       <---程序到这里发生错误
                }    
                printf( "writing   to   disk````\n ");                 //按道理说list已经是一个指针,传应该是没问题的了,但是怎么就出错了?


                                                                                                //还是我理解错误传递了错误的参数呢?那应该怎么传?
                for(ht-> next;   ht-> next!=NULL;ht-> next=ht-> next-> next)
                {
                                free(ht);
                }
}
在数据写入过程中,就几个个别的数据无法写入,其他都没有问题!这是怎么会事?


[解决办法]
WriteNumB = (int)fwrite( (stUserData*)pview, 1, sizeof(stUserData), fp);
再看出错的时候返回多少?

[解决办法]
我的建议是,不要长时间的开启一个文件流,尽量在用到的时候再开启,用完后马上关掉。长时间的开启会产生一些莫名其妙的问题,我以前遇到过,有的数据可以写进去,有的就写不进去,这次运行全写进去了,下次可能就会漏掉几个~ 用时再开启,用完马上关闭,虽然效率上差一点但是可以避免这种问题。
[解决办法]
函数原型: int fwrite(char *ptr,unsigned size,unsigned n,FILE *fp);

返回值为 写如的数据项的个数,
正确情况下是 n

所以对 fwrite 判断是否结果为 n 就可以知道了。

热点排行