前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们一起忘掉的C (二十一).文件中插内容

那些年我们一起忘掉的C (二十一).文件中插内容

作者头像
franket
发布2021-10-18 10:17:12
2320
发布2021-10-18 10:17:12
举报
文章被收录于专栏:技术杂记

前言

对文件指针的定位与操作是定向修改文件内容的基础


概要


文件中插入一个给定的字符串

给定一个含有n(n<100)个字符的文件,在这n个字符的中间处插入一个给定的字符串。

如: 源文件里面的内容是 12345,插入abc,结果:123abc45

如: 源文件里面的内容是 123456,插入abc,结果:123abc456

代码注解

代码语言:javascript
复制
#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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概要
    • 文件中插入一个给定的字符串
      • 代码注解
      • 思路
      • 基础知识点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档