文件中直接修改数据块数据
.
.
如果想要修改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不必须写。

1万+

被折叠的 条评论
为什么被折叠?



