在C语言下,如何在文件任意位置写入指定数据?这个问题看似很简单,其实还是有些小麻烦的。
fopen--打开 fread--读取
fflush--缓冲区写入文件
fseek--文件指针定位
fwrite--写入 fclose--关闭
rewind--重置指针至文件头
可以使用以上函数组合进行文件操作,不过目前遇到的一个问题是,使用fseek找到文件指针后,想在指定位置写入特定数据(不想覆盖原有数据),不料结果却出乎预料,原有同位置数据被后写入数据覆盖。
这里可以使用一个小技巧,首先将可能被覆盖的文件取出,放在另一个文件缓冲区内。接着再写入指定数据。最后再把第一步取出的缓冲区数据写入原文件末尾。源代码如下:
#include <stdio.h>
void main()
{
FILE* pMyfile,pFileBak;
char list[30];
char buf[30];
char insert[10];
int i,j;
long lOffset;
for(i=0;i<20;i++){
list[i]='a'+i;
}
for(j=0;j<10;j++){
insert[j]='A'+j;
}
lOffset=10;
pMyfile=fopen("txt1.txt","w+");
fwrite(list,sizeof(char),20,pMyfile);
fseek(pMyfile, -lOffset,SEEK_END);
fread(buf,sizeof(char),lOffset,pMyfile);
fseek(pMyfile,-lOffset,SEEK_END);
fwrite(insert,sizeof(char),10,pMyfile);
fseek(pMyfile,0,SEEK_END);
fwrite(buf,sizeof(char),10,pMyfile);
fclose(pMyfile);
}
当然,这样的操作会浪费内存空间,目前也只是权宜之计。
加载中,请稍候......