C语言怎么修改文件内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎么修改文件内容相关的知识,希望对你有一定的参考价值。

请教一个问题,要怎么样才能修改文本内的内容,在原先存在的文本文件中找到像要修改的位置,直接在该位置进行修改,而不是先将文本的内容读入内存,修改完然后再写进去,如果可以有这种功能的话,麻烦高手解答,本人将非常感激

提供思路:先一组一组数据读取,然后进行比较,看是不是你要修改的数据(如果是你要修改的数据,那此时文件的指针已经指向下一组数据了),然后用fseek(fp,-sizeof(type),SEEK_CUR);使文件指针指向该数据块(fp为文件指针,sizeof(type)为数据长度,type是我指定,你可以换成你需要的数据类型,比如int或是struct等) 如果你知道数据是第几组就更好了,直接用fseek(fp,(n-1)*sizeof(type),SEEK_SET);就能找到位置了 用前面两种方法的前提是,你存入数据的时候用的都是以数据块的方式写入的同一种数据(比如只用fwrite()函数写入的struct类型数据),如果用的是复合方式写入,比如用了fwrite()、fputc()、fprintf(),这样的话,定位就有问题了。 参考技术A 提供思路:先一组一组数据读取,然后进行比较,看是不是你要修改的数据(如果是你要修改的数据,那此时文件的指针已经指向下一组数据了),然后用fseek(fp,-sizeof(type),SEEK_CUR);使文件指针指向该数据块(fp为文件指针,sizeof(type)为数据长度,type是我指定,你可以换成你需要的数据类型,比如int或是struct等) 如果你知道数据是第几组就更好了,直接用fseek(fp,(n-1)*sizeof(type),SEEK_SET);就能找到位置了 用前面两种方法的前提是,你存入数据的时候用的都是以数据块的方式写入的同一种数据(比如只用fwrite()函数写入的struct类型数据),如果用的是复合方式写入,比如用了fwrite()、fputc()、fprintf(),这样的话,定位就有问题了。 参考技术B 文本文件就是以二进制写入和读出的 所以楼上的方法完全可以使用 用fseek()函数定位文件指针fwrite()写入数据 完成本次修改 是完全可以用的 参考技术C C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。
参考技术D 不好意思 目前我只会修改2进制文件 以''r+t"形式打开 fseek()定位文件指针到你要修改的位置 fwrite()直接放进你的数据 完成修改 对于文本文件我没办法 郁闷

C语言编程实现:将一个文件的内容复制到另一个文件。(详细点的,考试用。)谢谢!

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#ifdef BUFSIZ

#undef BUFSIZ

#define BUFSIZ 4096

#endif

/*

使用格式:mcpy 源文件 目标文件

且目标文件和源文件不能一样,否则会清空文件内容,

源文件必须存在,目标文件可存在也可不存在,如果存在,内容会被覆盖掉。

*/

int main(int argc,char **argv)

char buf[BUFSIZ];

int msglen;

if(argc!=3||strcmp(argv[1],argv[2])==0)

/*argc:命令行模式下,输入的参数数目。

  argv:第一个参数的首地址。*/

fprintf(stderr,"********************************\\n\\n");

fprintf(stderr,"Please usage:%s source_file destination_file\\nAnd source_file is different from destination_file\\n\\n",argv[0]);

fprintf(stderr,"********************************\\n");

exit(0);

FILE *fp_src,*fp_des;

if((fp_src=fopen(argv[1],"r"))==NULL)

/*为空,则打开失败*/

fprintf(stderr,"open %s failed!\\n",argv[1]);

exit(1);

if((fp_des=fopen(argv[2],"w"))==NULL)

/*为空,则打开或创建失败*/

fprintf(stderr,"open/create %s failed!\\n",argv[2]);

exit(2);

while(fgets(buf,BUFSIZ,fp_src)!=NULL)

/*从源文件读,读失败或到达文件尾部时,返回NULL*/

  

  

   if(fputs(buf,fp_des)==EOF)

   /*写入目标文件,写入失败时,返回EOF;若成功返回写入的字节数*/

  

   fprintf(stderr,"copy %s to %s failed!\\n",argv[1],argv[2]);

   exit(3);

  

  

  printf("copy %s to %s successful!\\n",argv[1],argv[2]);

  return 0;

参考技术A 方法1
#include <stdio.h>
#include <stdlib.h>
void main()

char filename[100],filename1[50],filename2[50];

printf("请输入要读的文件名:");
scanf("%s",filename1);
printf("请输入要写的文件名:");
scanf("%s",filename2);
sprintf(filename,"copy %s %s /y>nul",filename1,filename2);
system(filename);

方法2
#include <stdio.h>
void main()

FILE *source,*object;
size_t readlen;
char filename1[50],filename2[50];
char diskbuffer[8192];

printf("请输入要读的文件名:");
scanf("%s",filename1);
printf("请输入要写的文件名:");
scanf("%s",filename2);
source=fopen(filename1,"rb");
if (source==NULL)

fclose(source);
return;


object=fopen(filename2,"wb");
do

readlen=fread(diskbuffer,1,8192,source);
fwrite(diskbuffer,1,readlen,object);
while(!feof(source));
fclose(object);
fclose(source);
参考技术B 打开两个文件,从一个文件读数据,写入到另一个文件,例如: //------ FILE *fp1,fp2; char c; fp1=fopen("dat.txt","r"); /*打开 参考技术C //程序完成的操作:将D盘下 1.txt 文件中内容拷贝至 2.txt 文件中
#include <stdio.h>
#include <stdlib.h>
void FileCopy(FILE *,FILE *);//拷贝子程序申明
void main(void)

FILE *fpin, *fpout;
if((fpin = fopen("D:\1.txt","rb")) == NULL)

printf("1 can't open file! /n");//文件打开失败打印输出
return;

if((fpout = fopen("D:\2.txt","wb")) == NULL)

printf("2 can't open file! /n");
return;

FileCopy(fpin,fpout);
fclose(fpin);
fclose(fpout);
fpin = NULL;
fpout = NULL;
printf("~~~~~~~~~~~~~~~~~~");
return;

void FileCopy(FILE *fpin, FILE *fpout)

char ch;
ch = getc(fpin);
while(!feof(fpin))

putc(ch,fpout);
ch = getc(fpin);


求加分 哈哈
参考技术D #include<stdio.h>
int main()

FILE *fp1,*fp2;
char buf[1024];
fp1=fopen("C:/1.dat","rb");
fp2=fopen("C:/2.dat","wb");
fread(buf,1024,1,fp1);
while(!feof(fp1))

fwrite(buf,1024,1,fp2);
fread(buf,1024,1,fp1);

fclose(fp1);
fclose(fp2);

以上是关于C语言怎么修改文件内容的主要内容,如果未能解决你的问题,请参考以下文章

怎么对C语言中的文件进行内容添加,删除,查找的操作?

为啥C语言输出文件内容乱码

怎么用C语言对文件操作用特定内容替换其中某些内容

C语言怎么做到从文件中读取一行数据,然后改变这一行内容

如何用C语言文件操作修改指定文件

C语言 怎么读取文件的每一行的内容