C语言中什么函数可以修改文件内容(可以随意删除原内容的一部分)?

作者&投稿:庞郝 (若有异议请与网页底部的电邮联系)
c语言中如何修改文件中的部分内容?~

普通都是将文件顺序读取,然后写到一个新的工作文件中,不修改的部分原样写,遇到要修改的部分就写改变后的数据,最后将原文件改个名字(比如叫xxx.bak),新文件改成原来文件的名称。

文件的读,写,查找,和删除
文件处理的那些函数看看,练练就知道了
fprintf,fopen这些

C语言文件操作详解

C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:

      文件的打开操作 fopen 打开一个文件

      文件的关闭操作 fclose 关闭一个文件

      文件的读写操作 fgetc 从文件中读取一个字符
              fputc 写一个字符到文件中去
              fgets 从文件中读取一个字符串
              fputs 写一个字符串到文件中去
              fprintf 往文件中写格式化数据
              fscanf 格式化读取文件中数据
              fread 以二进制形式读取文件中的数据
              fwrite 以二进制形式写数据到文件中去
              getw 以二进制形式读取一个整数
              putw 以二进制形式存贮一个整数

    文件状态检查函数 feof 文件结束
              ferror 文件读/写出错
              clearerr 清除文件错误标志
              ftell 了解文件指针的当前位置

      文件定位函数 rewind 反绕
              fseek 随机定位

# 文件的打开
 1.函数原型

FILE *fopen(char *pname,char *mode)

 2.功能说明
   按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理:
(1) 此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件;
(2) 此时如mode 规定按读方式打开文件,就会产生一个错误。

打开文件的作用是:
(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
(2)开辟一个缓冲区;
(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;
FILE *:指出fopen是一个返回文件类型的指针函数;

 3.参数说明
pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式见表8.1

 4.返回值
   正常返回:被打开文件的文件指针。
   异常返回:NULL,表示打开操作不成功。

例如:

//定义一个名叫fp文件指针
FILE *fp;
//判断按读方式打开一个名叫test的文件是否失败
if((fp=fopen("test","r")) == NULL)//打开操作不成功
{
printf("The file can not be opened.\n");  
exit(1);//结束程序的执行
}

 要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。

* 文件的关闭

1. 函数原型

int fclose(FILE *fp);

2. 功能说明
  关闭由fp指出的文件。此时调用操作系统提供的文件关闭功能,关闭由fp->fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。

3. 参数说明
  fp:一个已打开文件的文件指针。

4. 返回值
  正常返回:0。
  异常返回:EOF,表示文件在关闭时发生错误。
例如:

int n=fclose(fp);

*文件的读写操作

A. 从文件中读取一个字符
  1. 函数原型

int fgetc(FILE *fp);

  2. 功能说明
    从fp所指文件中读取一个字符。
  3. 参数说明
    fp:这是个文件指针,它指出要从中读取字符的文件。
  4. 返回值
    正常返回: 返回读取字符的代码。
    非正常返回:返回EOF。例如,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。
  5. 实例

【例】显示指定文件的内容。

//程序名为:display.c
//执行时可用:display filename1 形式的命令行运行。显示文件filename1中的内容。例如,执行命令行display display.c将在屏幕上显示display的原代码。

//File display program.
#include <stdio.h>
void main(int argc,char *argv[]) //命令行参数
{
int ch;//定义文件类型指针
FILE *fp;//判断命令行是否正确
if(argc!=2)
{
printf("Error format,Usage: display filename1\n");
return; //键入了错误的命令行,结束程序的执行
}
//按读方式打开由argv[1]指出的文件
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("The file <%s> can not be opened.\n",argv[1]);//打开操作不成功
return;//结束程序的执行
}
//成功打开了argv[1]所指文件
ch=fgetc(fp); //从fp所指文件的当前指针位置读取一个字符
while(ch!=EOF) //判断刚读取的字符是否是文件结束符
{
putchar(ch); //若不是结束符,将它输出到屏幕上显示
ch=fgetc(fp); //继续从fp所指文件中读取下一个字符
} //完成将fp所指文件的内容输出到屏幕上显示
fclose(fp); //关闭fp所指文件
}

B. 写一个字符到文件中去

1. 函数原型

int fputc(int ch,FILE *fp)

2. 功能说明
  把ch中的字符写入由fp指出的文件中去。
3. 参数说明
  ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。
  fp:这是个文件指针,指出要在其中写入字符的文件。
4. 返回值
  正常返回: 要写入字符的代码。
  非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。
5. 实例

【例】将一个文件的内容复制到另一个文件中去。

//程序名为:copyfile.c
//执行时可用:copyfile filename1 filename2形式的命令行运行,将文件filename1中的内容复制到文件filename2中去。
//file copy program.
#include <stdio.h>
void main(int argc,char *argv[]) //命令行参数
{
int ch;
FILE *in,*out; //定义in和out两个文件类型指针
if(argc!=3) //判断命令行是否正确
{
printf("Error in format,Usage: copyfile filename1 filename2\n");
return; //命令行错,结束程序的执行
}
//按读方式打开由argv[1]指出的文件
if((in=fopen(argv[1],"r"))==NULL)
{
printf("The file <%s> can not be opened.\n",argv[1]);
return; //打开失败,结束程序的执行
}
//成功打开了argv[1]所指文件,再
//按写方式打开由argv[2]指出的文件
if((out=fopen(argv[2],"w"))==NULL)
{
printf("The file %s can not be opened.\n",argv[2]);
return; //打开失败,结束程序的执行
}
//成功打开了argv[2]所指文件
ch=fgetc(in); //从in所指文件的当前指针位置读取一个字符
while(ch!=EOF) //判断刚读取的字符是否是文件结束符
{
fputc(ch,out); //若不是结束符,将它写入out所指文件
ch=fgetc(in); //继续从in所指文件中读取下一个字符
} //完成将in所指文件的内容写入(复制)到out所指文件中
fclose(in); //关闭in所指文件
fclose(out); //关闭out所指文件
}

【例】按十进制和字符显示文件代码,若遇不可示字符就用井号"#"字符代替之。

//程序名为:dumpf.c
//执行时可用:dumpf filename1 形式的命令行运行。
// File dump program.
#include <stdio.h>
void main(int argc,char *argv[])
{
char str[9];
int ch,count,i;
FILE *fp;
if(argc!=2)
{
printf("Error format,Usage: dumpf filename\n");
return;
}
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
count=0;
do{
i=0;
//按八进制输出第一列,作为一行八个字节的首地址
printf("%06o: ",count*8);
do{
// 从打开的文件中读取一个字符
ch=fgetc(fp);
// 按十进制方式输出这个字符的ASCII码
printf("%4d",ch);
// 如果是不可示字符就用"#"字符代替
if(ch<' '||ch>'~') str[i]='#';
// 如果是可示字符,就将它存入数组str以便形成字符串
else str[i]=ch;
// 保证每一行输出八个字符
if(++i==8) break;
}while(ch!=EOF); // 遇到文件尾标志,结束读文件操作
str[i]='\0'; // 在数组str加字符串结束标志
for(;i<8;i++) printf(" "); // 一行不足八个字符用空格填充
printf(" %s\n",str); // 输出字符串
count++; // 准备输出下一行
}while(ch!=EOF); // 直到文件结束
fclose(fp); // 关闭fp所指文件
}

C. 从文件中读取一个字符串

1. 函数原型
  char *fgets(char *str,int n,FILE *fp)
2. 功能说明
  从由fp指出的文件中读取n-1个字符,并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符'\0'。
3. 参数说明
  str:接收字符串的内存地址,可以是数组名,也可以是指针。
  n: 指出要读取字符的个数。
  fp:这是个文件指针,指出要从中读取字符的文件。
4. 返回值

正常返回:返回字符串的内存首地址,即str的值。
非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要从"写打开"文件中读取字符串,将
发生错误而返回一个NULL值。

D. 写一个字符串到文件中去

1. 函数原型

int fputs(char *str,FILE *fp)

2. 功能说明
  把由str指出的字符串写入到fp所指的文件中去。
3. 参数说明
  str:指出要写到文件中去的字符串。
  fp:这是个文件指针,指出字符串要写入其中的文件。
4. 返回值
  正常返回: 写入文件的字符个数,即字符串的长度。
  非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要往一个"读打开" 文件中写字符串时,
会发生错误而返回一个NULL值。

5.实例

【例】以下程序将一个文件的内容附加到另一个文件中去。

//程序名:linkfile.c
//执行时可用:linkfile filename1 filename2形式的命令行运行,将文件filename2的内容附加在文件filename1之后。
// file linked program.
#include <stdio.h>
#define SIZE 512
void main(int argc,char *argv[])
{
char buffer[SIZE];
FILE *fp1,*fp2;
if(argc!=3)
{
printf("Usage: linkfile filename1 filename2\n");
return;
}
// 按追加方式打开argv[1] 所指文件
if((fp1=fopen(argv[1],"a"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
if((fp2=fopen(argv[2],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[2]);
return;
}
// 读入一行立即写出,直到文件结束
while(fgets(buffer,SIZE,fp1)!=NULL)
printf("%s\n",buffer);
while(fgets(buffer,SIZE,fp2)!=NULL)
fputs(buffer,fp1);
fclose(fp1);
fclose(fp2);
if((fp1=fopen(argv[1],"r"))==NULL)
{
printf("The file %s can not be opened.\n",argv[1]);
return;
}
while(fgets(buffer,SIZE,fp1)!=NULL)
printf("%s\n",buffer);
fclose(fp1);
}

使用mmap函数,把文件映射到内存,然后就可以对文件进行随意修改了,关闭文件后,自动保存到文件。

修改该内容的话,你可以seek()到指定位置再写入,就是覆盖写,要删除其中一部分就必须把后续的读出来再写入被删除部分的头,印象中没有直接删除中间一部分的函数。

用remove函数,直接删掉文件
想改内容,就fopen, fread, fwrite

fopen()
fread()
fseek()
fwrite()
fclose()

就OK


C语言中的函数可以分为几类?
C语言中的函数可以分为以下几类:内置函数:这些是由C语言标准库提供的函数,例如数学函数、字符串函数等。自定义函数:这些是由程序员自己定义的函数,可以用来实现特定的功能。库函数:这些是由其他库文件提供的函数,例如Windows API函数、数据库函数等。递归函数:这种函数在它自己的函数体内调用自己,...

在C语言中除了pow外还有什么方法可以实现乘方运算吗?
1、C语言中计算一个数的N次方可以用库函数pow来实现,还可以直接使用2^3就可以算出结果。pow函数原型:double pow(double x,double y)。其中x值是底数,y值是幂。举例:double a=pow(3.14,2)计算3.14的平方。注意:使用pow函数时,需要将头文件#include<math.h>包含进源文件中。2、在C语言...

if函数是什么意思?
这是if函数的核心逻辑。在大多数编程语言中,如Python、Java等,其语法都是类似的。具体的实现方式可能会因语言而异。但在大多数语言中,都会遵循上述逻辑结构。三个条件对应三个结果的写法 对于三个条件对应三个结果的情况,我们可以使用if-elif-else结构来构建代码。这是一种嵌套的决策结构,其中根据...

C语言中函数的类型有哪些呢?
1. 库函数(Library Function):也称为内置函数(Built-in Function),是由C语言提供的、已经封装好的函数。库函数通常具有标准化、通用化的特点,包括数学运算、字符串处理、文件操作等方面。例如`printf()`和`scanf()`是C语言中常用的库函数。2. 用户自定义函数(User-Defined Function):也称为...

c语言中pow是什么意思?
在C语言中,可以使用pow()函数来表示次方。这个函数是C语言标准库math.h中的一个函数,用于计算一个数的幂。pow函数是C语言标准库中的一个内置函数,用于计算一个数的次方。其原型:double pow(double base,double exponent)。其中base是要计算次方的基数,exponent是要计算的指数。例如,如果底数为...

c语言中根号函数怎么实现
在C语言中,根号函数可以使用数学库中的sqrt()函数来实现。详细论述如下:1、该函数的原型为:double sqrt();其中,x是要计算平方根的数,返回值为一个双精度浮点数,表示x的平方根。2、除了sqrt()函数外,还可以使用math.h头文件中的宏定义来表示平方根。例如,M_SQRT1_2表示1\/sqrt(2)...

C语言中允许默认的函数类型是什么
int。C语言规定:在定义函数时,若其返回值类型为int,则可以默认。C语言函数有三类,分为外部函数、静态函数、内联函数,其中前两种是C89标准支持,第三种是C99标准增加的。1、外部函数 这类函数是默认的函数类型,基本上平时我们使用的就是这种函数,声明有以下两种方式,例如:\/\/ 使用extern关键字,...

C语言中max函数的作用是什么啊?
C = max(A, [], dim)根据指定标量dim返回矩阵A中的最大元素。比如dim=1,则返回行向量,其中每个元素都是对应列的最大元素;比如dim=2,则返回列向量,其中每个元素都是对应行的最大元素。2、min函数 用于求数组中的最小值。暂时用到的语法形式有3种:C = min(A);C = min(A, B);C ...

C语言中main函数的作用是什么?
在C语言中,main 函数是程序的入口点,也是程序开始执行的地方。当程序启动时,操作系统会自动寻找名为 main 的函数并执行它。main 函数的主要作用是初始化程序环境,创建必要的资源,然后调用其他函数完成程序的具体任务。在 main 函数内部,可以定义全局变量、调用其他函数、进行输入输出操作等。main 函数...

c语言main函数的位置是什么?
C语言中main函数可以在任意位置。每一个C语言程序有且只有一个主函数(main()),且程序必须从main()函数开始,它是程序开始时调用的第一个函数。函数定义形式:【int main(void){}】。C语言规定,在一个C程序中,main()函数可以在任意位置。解析:每个C程序有且只有一个主函数(main),且程序必须...

旺苍县13725427630: 在C语言中用什么函数往文件中删除或添加信息
佴龙补肾: 没什么函数,最简单的方法就是先读出文件,进行修改,修改了再存

旺苍县13725427630: 关于C语言中文件修改的操作! -
佴龙补肾: 使用文件操作函数fopen即可创建文件,使用文件操作函数fprintf即可修改文件内容. 1、C语言标准库提供了一系列文件操作函数.文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中.例如:fopen、fclose...

旺苍县13725427630: 怎么用C语言修改文件内容 -
佴龙补肾: 用fopen打开文件,读入内容.然后修改掉想要修改的地方,再用fopen打开,把修改后的文件输出到文件里.

旺苍县13725427630: c语言怎么创建文件,修改文件内容. -
佴龙补肾: //创建文件 FILE *fpOut=fopen("c:\\a.txt"”,"wt+");//写数据 char szTmp[20]; strcpy(szTmp,"张三 男\r\n"); fwrite(szTmp, strlen(szTmp),1,fpOut); strcpy(szTmp,"李四 女\r\n"); fwrite(szTmp, strlen(szTmp),1,fpOut);//关闭文件 fclose(fpOut);//修改,删除就是用fread把文件读出来,逐行判断,然后重新写入文件.

旺苍县13725427630: C语言文件操作简单修改 -
佴龙补肾: modify()修改如下,请重点参考注释位置:void modify() {struct Info student;FILE * fp1,* fp2;fpos_t oldpos; /*注意这里,此变量用于保存文件当前读写位置*/int flag;char ch[12];char k; do{if ((fp1=fopen("student.txt","rb"))==NULL) ...

旺苍县13725427630: C语言怎么修改文件内容 -
佴龙补肾: 提供思路: 先一组一组数据读取,然后进行比较,看是不是你要修改的数据(如果是你要修改的数据,那此时文件的指针已经指向下一组数据了),然后用fseek(fp,-sizeof(type),SEEK_CUR);使文件指针指向该数据块(fp为文件指针,sizeof...

旺苍县13725427630: c语言中怎么读取文件中的字符并更改 -
佴龙补肾: 流程如下:1:fopen(old_file,"r");打开原文件2:fopen(new_file,"w");建立临时文件3:使用fread或者其他你用着顺手的函数读取原文件内容4:判断是否到文件结尾,若是,则跳至第8步, 否则执行第5步5:判断读取到的内容是否是你要修改的6:若是,则修改后写入临时文件;若否, 则不做修改写入临时文件.7:跳回第3步8:关闭FILE指针9删除原文件, 将临时文件重命名为原文件名.结束.

旺苍县13725427630: C语言如何修改文件内容? -
佴龙补肾: 将这些数据存入一个结构里面,在写入文件时按照这个结构的大小分配文件内存给他们,然后在改的时候,直接在文件中找到这个数据,改好后直接在那个位置写入就行了,不会覆盖内存的...行就顶一下哦,呵呵

旺苍县13725427630: C语言文本文件中的具体内容能被修改吗??? 谢谢啦! -
佴龙补肾: 当然能.不过不清楚你说的是C源文件还是说用C程序打开的文件.如果说是C源文件,用普通的记事本就可以改.如果是读取文件,那就要用关于文件的函数fopen, fclose, fprintf, fscanf, fputs, fgetc, fgetc, fputc等

旺苍县13725427630: C语言在二进制文件中加内容,怎么改 -
佴龙补肾: 用rb打开的是不能写的,你可以用rb+ 或者用ab 如果是在结尾添加,那么推荐用ab 如果存在修改或者删除,也就是存储后文件大小可能减少的,推荐先rb打开,读取到内存,修改后,再wb打开写入 如果在某个位置修改,但不改变总大小,那么用ab+打开,seek到修改位置,写入修改内容,关闭 总之根据你的实际情况选择最适合的方式.最通用的就是rb读完,内存修改,再wb重新打开,写入所有.适合所有情况,不过效率低,资源消耗大

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网