当前位置:首页 » 编程语言 » c语言中读取和修改文件内容
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中读取和修改文件内容

发布时间: 2023-07-22 15:45:10

‘壹’ c语言如何实现对txt文件的读取和写入

使用fopen的r方式可以实现读取,用w+方式可以实现写入。
1.fopen的函数原型:FILE
*
fopen(const
char
*
path,const
char
*
mode);

fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r
以只读方式打开文件,该文件必须存在。
r+
以可读写方式打开文件,该文件必须存在。
rb+
读写打开一个二进制文件,允许读数据。
rw+
读写打开一个文本文件,允许读和写。
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
(原来的EOF符不保留)
wb
只写打开或新建一个二进制文件;只允许写数据。
wb+
读写打开或建立一个二进制文件,允许读和写。
wt+
读写打开或着建立一个文本文件;允许读写。
at+
读写打开一个文本文件,允许读或在文本末追加数据。
ab+
读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b
字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
2.例程:
#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
char c;
int main(){
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"w"); //创建文件
if(NULL==fp) return -1;//要返回错误代码
while(scanf("%c",&c)!=EOF) fprintf(fp,"%c",c); //从控制台中读入并在文本输出
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
return 0;
}

‘贰’ c语言实现文件读取与写入

楼下这个人真的装,不会就算了还在这水,你还是去打斗地主吧!
这个题简单,用fgetc函数直接进行循环写入就行了,话说贴主是湖工大的吧?这是实训题,你还是自己打一下吧,下面是参考答案:
#include<stdlib.h>
#include<stdio.h>
void solve(){
FILE *fp1,*fp2;
fp1=fopen("a.txt","r");
fp2=fopen("b.txt","w");
char c;
c=fgetc(fp1);
while(c!=EOF)
{
fputc(c,fp2);
c=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}

‘叁’ 怎么用C语言修改文件内容

1.fopen()

fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。

参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下:

字符串 含义

"r" 以只读方式打开文件

"w" 以只写方式打开文件

"a" 以追加方式打开文件

"r+" 以读/写方式打开文件,如无文件出错

"w+" 以读/写方式打开文件,如无文件生成新文件

一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符’\n’,而二进制模式认为它是两个字符 0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。

系统默认的是以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如_fmode=O_TEXT;就设置默认打开方式为文本模式;而_fmode=O_BINARY;则设置默认打开方式是二进制模式。

我们也可以在模式字符串中指定打开的模式,如"rb"表示以二进制模式打开只读文件,"w+t"或"wt+"表示以文本模式打开读/写文件。

此函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果成败,返回NULL.
例:
以下是引用片段:
FILE *fp;
if(fp=fopen("123.456","wb"))
puts("打开文件成功");
else
puts("打开文件成败");

2.fclose()

fclose()的功能就是关闭用fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失败返回EOF。

在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就经常犯这样的错误。

例:fclose(fp);

3.fputc()

向流写一个字符,原型是int fputc(int c, FILE *stream); 成功返回这个字符,失败返回EOF。

例:fputc(’X’,fp);

4.fgetc()
从流中读一个字符,原型是int fputc(FILE *stream); 成功返回这个字符,失败返回EOF。

例:char ch1=fgetc(fp);

5. fseek()

此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,参数offset是移动的字符数,whence是移动的基准,取值是:

符号常量 值 基准位置

SEEK_SET 0 文件开头

SEEK_CUR 1 当前读写的位置

SEEK_END 2 文件尾部

例:fseek(fp,1234L,SEEK_CUR);//把读写位置从当前位置向后移动1234字节(L后缀表示长整数)

fseek(fp,0L,2);//把读写位置移动到文件尾

6.fputs()

写一个字符串到流中,原型int fputs(const char *s, FILE *stream);

例:fputs("I Love You",fp);

7.fgets()

从流中读一行或指定个字符,原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

例:如果一个文件的当前位置的文本如下:
Love ,I Have

But ……..

如果用

fgets(str1,4,file1);

则执行后str1="Lov",读取了4-1=3个字符,而如果用

fgets(str1,23,file1);

则执行str="Love ,I Have",读取了一行(包括行尾的’\n’)。

8.fprintf()

按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。

例:fprintf(fp,"%2d%s",4,"Hahaha");

9.fscanf()

从流中按格式读取,其原型是int fscanf(FILE *stream, const char *format[, address, …]);其用法和scanf()相同,不过不是从控制台读取,而是从流读取罢了。

例:fscanf(fp,"%d%d" ,&x,&y);

10.feof()

检测是否已到文件尾,是返回真,否则返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf("已到文件尾");

11.ferror()

原型是int ferror(FILE *stream);返回流最近的错误代码,可用clearerr()来清除它,clearerr()的原型是void clearerr(FILE *stream);

例:printf("%d",ferror(fp));

12.rewind()

把当前的读写位置回到文件开始,原型是void rewind(FILE *stream);其实本函数相当于fseek(fp,0L,SEEK_SET);

例:rewind(fp);

13.remove()

删除文件,原型是int remove(const char *filename); 参数就是要删除的文件名,成功返回0。

例:remove("c:\\io.sys");

14.fread()

从流中读指定个数的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);参数ptr是保存读取的数据,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是读取的块数,如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开的文件中。

例:
以下是引用片段:
char x[4230];
FILE *file1=fopen("c:\\msdos.sys","r");
fread(x,200,12 ,file1);//共读取200*12=2400个字节

15.fwrite()

与fread对应,向流中写指定的数据,原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);参数ptr是要写入的数据指针,void*的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是要写的块数,如果成功,返回实际写入的块数(不是字节数),本函数一般用于二进制模式打开的文件中。

例:
以下是引用片段:
char x[]="I Love You";
fwire(x, 6,12,fp);//写入6*12=72字节
将把"I Love"写到流fp中12次,共72字节

16.tmpfile()

其原型是FILE *tmpfile(void); 生成一个临时文件,以"w+b"的模式打开,并返回这个临时流的指针,如果失败返回NULL。在程序结束时,这个文件会被自动删除。

例:FILE *fp=tmpfile();

17.tmpnam();

其原型为char *tmpnam(char *s); 生成一个唯一的文件名,其实tmpfile()就调用了此函数,参数s用来保存得到的文件名,并返回这个指针,如果失败,返回NULL。

例:tmpnam(str1);

‘肆’ C语言 修改文件中的数据

有三种方法可以实现,分别如下:

第1种、将文件中数据读入内存中,修改后,清空源文件,存入新数据。

第2种、以读写的方式打开文件,将文件指针移动到要修改的地方,写入新数据。新数据将会覆盖掉旧数据。

第3种、以读写的方式打开文件,将文件指针定位到需要修改数据的末尾,然后删除需要修改的数据(通过循环n次执行fputc(8,fp),直到清空需要修改的数据为止,8为退格键对应的ascii)。 然后计算需要加入的新数据长度,通过fputc(32,fp)来添加空格到文件中(32为空格键的ascii). 然后根据指针位置,填入数据覆盖掉这些空格。

注意:第1种方法适合数据量较小的情况,第2种、第3种适合数据量较大的情况。

提供一个参考代码,如下:

#include"stdio.h"
main()
{
FILE*in=fopen("f:\test.txt","r");
FILE*out=fopen("f:\back.txt","w");/*out是充当临时文件作用*/
intch=0;
if(!in)
{
printf("cann'topentest.txt ");
exit(1);
}
if(!out)
{
printf("cann'tcreateback.txt ");
exit(1);
}
/*开始复制*/
while(!feof(in))
{
ch=fgetc(in);
if(ch=='a')ch='p';
fputc(ch,out);
}
fclose(in);fclose(out);
unlink("f:\test.txt");/*删除test.txt*/
rename("f:\back.txt","test.txt");/*改名*/
printf("ok!!!!!! ");

}

‘伍’ C语言程序设计 简单的读取文件并整理数据

首先还是先完整的学习一下文件打的所有方式。
文件的打开方式是由r,w,a,t,b,+,六个字符组成。如下:
“r” 只读打开文件,如果文件不存在,返回一个错误.
“r+” 可读写打开文件,如果文件不存在,返回错误.
“w” 只写打开文件,如果文件不存在,则创建一个新的文件,如果已经存在,将里面的内容清空.
“w+” 可读写打开文件,如果文件不存在,创建新文件,如果已经存在,清空文件中的内容.
“a” 以追加写入的方式打开文件(在文件未尾追加写入数据) ,如果文件不存在,创建新文件.
“a+” 以可读取并且可追加写入的方式打开文件,如果不存在,创建新文件.
如果要指定打开文本文件,则在打开方式中加入’ t ‘ 字符.如果是二进制文件,则加入’ b ‘ 字符. 如下:

1

"rt" "rt+" "r+t" "rb" "rb+" "r+b"

当以追加方式打开文件时,文件的数据偏移指针会指向文件的最未尾,如果此时从文件读入数据,可能会失败,都已经文件未尾了,还有什么数据要读的?所以追加方式打开时,不要第一时间读入数据.
注意: 如果想打开文件后,先读取数据,然后再写入,请不要用”w+”的方式,因为”w”方式会把已存在的文件的数据清空,所以会发生读取错误.
基于上面介绍,我们这章要从一个文本文件中读取数据,所以使用下面代码打开文件:

1
2
3
4

FILE * fptr;
fptr = fopen( FILE_NAME , "rt" );
.....
fclose( fptr );

读取文件的函数原型如下:

1
2

int fgetc( FILE* fstream);
char* fgets( char* buf , int n , FILE* fstream);

fgetc() 返回读到的字符的ASCII码.
在fgets()中,buf参数用来指定一个字符串指针来接收读到的数据,参数n用来指定读入的最大字符数.
fgets() 返回读到的字符串指针.如果错误,返回NULL.
并且,我们可以用feof()函数来判断是否已经读到了文件的未尾.

1

int feof( FILE* fstream);

如果已经读到文件未尾,feof()返回非0值(也就是TRUE值),如果没有,返回0(FALSE);
学完了上面,我们现在准备一个data.txt文件,内容可以,也可以你喜欢的任何内容:

1
2
3

1234567890
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

请把data.txt文件与程序一起放在同一个文件夹,否则会有打开data.txt文件错误
然后编写一个程序,代码如下:

C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

/*
本程序中涉及到的fputc() 和 fputs()函数在上一章已经作了介绍,可自行查阅.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "data.txt" //文件名
#define BUFSIZE 27 //缓存的大小为27字节
int main( int argc , char* argv[])
{
FILE *fptr;
char buf[BUFSIZE];
char ch;
fptr = fopen( FILENAME , "r+t");
if ( fptr == NULL )
{
puts( "open file error");
exit(1);
}
do{
ch = fgetc( fptr);
fputc(ch , stdout);
}while( ch != 'n' );//如果读到换行符,就退出循环.
while( ! feof( fptr) ){//如果读到文件未尾,就退出循环.
memset ( buf , 0 , BUFSIZE);
fgets( buf , BUFSIZE -1 , fptr );
//之所以要限制读入的数据长度为BUFSIZE-1,因为buf字符串的最后一个字符必须为'',防止被读入的数据覆盖.
fputs( buf , stdout);
}
fclose( fptr);
getchar();//程序暂停,按下回车键后继续
return 0 ;
}

把代码复制到编译环境中编译后,把执行程序放在与data.txt相同的文件夹,然后运行,就会看到效果了.

‘陆’ C语言怎么修改文件信息

#include<stdio.h>

#include<stdlib.h>//文件操作函数头文件

struct st{//定义一个结构体

char a[11];//301

char b[11];//01

char c[29];//xiaoming

char d[9];//m1

};

int main()

{

FILE *fp;//文件指针

fp=fopen("D:\123.txt","r+");//用fopen函数打开D盘下,名为123.txt的文件;

struct st s={"301","01","xiaoming","m"};//各成员的初值;

scanf("%s%s",s.c,s.d);//输入之后会把原有的信息覆盖掉;

fprintf(fp,"%s %s %s",s.a,s.b,s.c,s.d);//用fprintf函数将固定格式的数据写入文件;

printf("%s %s %s %s",s.a,s.b,s.c,s.d);

fclose(fp);

return 0;

/*这样就可以修改文件内容了,之前没仔细看,没看到是文件操作*/

}

‘柒’ C语言如何实现对txt文件的读取和写入

1、使用VS新建空工程,直接点击确定,如下所示。

‘捌’ c语言中怎么读取文件中的字符并更改

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

‘玖’ C语言如何操作excel文件

1.写操作 第一步:单纯C语言写入Excel文件只能是 *.csv的后缀文件(是和txt一样,以二进制文本形式存储,它是以都逗号分隔符做个单元格内容的划分, .xls存储比较复杂, .csv文件可以可以通过...
2.读操作 读取文件 对于读取Excel文件的操作,使用了文件随机定位函数fseek(),它的一般调用格式如下: fseek...
3.最新补充 2018.08.28 由于经常有朋友告诉我运行结果是0 ,并将他们的工程发到我...