对文件指针的定位与操作是定向修改文件内容的基础
给定一个含有n(n<100)个字符的文件,在这n个字符的中间处插入一个给定的字符串。
如: 源文件里面的内容是 12345,插入abc,结果:123abc45
如: 源文件里面的内容是 123456,插入abc,结果:123abc456
#include <stdio.h>
#define LENGTH 100
void main()
{
FILE *fp; //定义一个文件指针对文件进行操作
int i,pos; //定义两个整型变量,一个用来进行循环控制,一个用来保存插入位置
char tmpc[LENGTH],str[LENGTH],ch; //定义两个字符型数组和一个字符的临时存放处
if((fp=fopen("test.txt","r+"))==NULL) //尝试以读写的方式打开test.txt文件,这个文件必须提前存在,如果失败就提示出错信息并且返回
{
printf("cannot open file\n");
return;
}
fseek(fp,0L,2); //将文件指针定位到文件末尾
pos=(ftell(fp)+1)/2; //计算出文件包含的字符数量和中间位置
fseek(fp,pos,0); //将文件指针移动到中间的位置
for(i=0,ch=fgetc(fp);ch != EOF;i++,ch=fgetc(fp)) tmpc[i]=ch; //从中间位置开始将之后的所有内容保存到字符数组tmpc中
tmpc[i]='\0'; //加上字符串结束符
printf("please input a string (less then %d length):\n",LENGTH);
scanf("%s",str); //将要插入的字符串保存到字符数组str中
printf("the patten string is : %s\n",str);
for(i=0,fseek(fp,(long)pos,0);str[i] != '\0' ;i++) fputc(str[i],fp); //从文件中间位置开始将要插入的字符串顺序写入,fseek(fp,(long)pos,0)将文件指针定位到中间位置以待插入操作,(long)pos 是在将pos的整型强制转换为长整型
for(i=0;tmpc[i] != '\0' ;i++) fputc(tmpc[i],fp); //将之前保存下来的文件后半段内容追加到插入字符串的末尾
rewind(fp); //将文件指针归位到头部
for(ch=fgetc(fp);ch != EOF;ch=fgetc(fp)) putchar(ch); //将文件内容遍历并且输出
fclose(fp); //关闭指针,这个操作很有必要,首先可以确保缓存中的信息刷新到了磁盘,其次释放了文件描述符,归还了系统资源
putchar('\n');
}
首先要确认出插入点,然后将插入点后面的内容进行保存,紧接着将指定信息进行写入,最后将保存的内容追加到结尾
原文地址
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。