您的位置:首页 > 其它

文件中直接修改数据块数据

2013-09-26 11:50 357 查看

文件中直接修改数据块数据

.
.
        
如果想要修改txt文件中的某部分数据,还不想把所有的全部读出来之后再修改,则可以通过下面的方式进行:

        

         FILE* fp = fopen("1.txt","rt+");                          //打开方式用r+或者rt+

         char bufTemp[10];

 

         fseek(fp,2*sizeof(bufTemp),0);                           //定位

         fread(bufTemp,sizeof(bufTemp),1,fp);             //读取

 

         //bufTemp[1] = 'b';                                                 //修改

         strcpy(bufTemp,"World");                                    //修改

 

        
fseek(fp,-1L*sizeof(bufTemp),SEEK_CUR);    //
重新定位,回退一个数据块

         fwrite(bufTemp,sizeof(bufTemp),1,fp);  

 

         fclose(fp);

        

       结果如图:(已经提前写入了若干的Hello)

         


 

        
经过反复的测试发现,在修改读入出来的数据块的局部内容之后、写入文件之前,必须要进行一个fseek()的调用,fseek(fp,-1L*sizeof(bufTemp),SEEK_CUR);保证了数据块能够顺利写入写入原来的位置,就算不想要写到原来的位置,也得调用fseek(fp,0,SEEK_CUR);,不然数据是不能写入的。

 

        
而同时也发现了,如果之前不用fread()读取该块数据,而是仅仅定位之后用fwrite()函数写入自定义的bufTemp,则不用fseek()函数的调用了。

 

        
顺便提一下,关于打开方式,这样的情况必须使用”r+” or ”rt+”,因为r是读入,可以保证原来的文件不会被删除,+保证了既可以读也可以写,t是以文本文件方式打开,默认是t,so不必须写。

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息