资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

学习笔记1:C语言文件操作(一)-创新互联

目录

创新互联公司服务项目包括福安网站建设、福安网站制作、福安网页制作以及福安网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,福安网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到福安省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

一. 文件介绍

1.文件的分类

2.关于数据文件

3.文件名

二.引言

三. C程序中文件的打开和关闭

1.文件信息区

2.文件打开和关闭函数

3.实现文件的打开与关闭

四.文件的顺序读写

1.文件读取示例:

2.文件的写入示例:


一. 文件介绍 1.文件的分类

2.关于数据文件

数据文件的内容不是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据,或者输出内容到其中.

3.文件名

一个文件要有唯一的文件标识(为了方便,我们就将文件标识称为文件名),以便用户识别和引用。

文件名包含3个部分 :文件路径+文件名主干+文件后缀

二.引言

学习文件操作之前,我们所编写的程序都是在与计算机的动态内存(比如键盘输入缓存区,输出终端等)进行数据交换,程序本身的运行也是在动态内存中进行的,所以程序关闭后,所有的数据都会被清理。若想要让程序所处理的数据得到保存并可以在下次运行程序时直接将相关数据导入到程序中,我们就必须让程序实现文件操作,通过文件操作,程序便可以和计算机硬盘中的数据文件进行数据交换,存储在硬盘数据文件中的数据可以持久地保存并随时可以被取用。 

输入输出流是抽象的概念,是开发人员为了编程人员使用方便统一封装起来的过程,其具体的实现细节无须我们关心。 

C语言程序,只要运行起来,就默认打开了三个流:

stdin--标准输入流--键盘

stdout--标准输出流--屏幕

stderr--标准错误流--用于输出警告信息

三. C程序中文件的打开和关闭 1.文件信息区

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。

在VS2013编译环境中该类结构体定义如下:

struct _iobuf{
                char *_ptr;
                int      _cnt;
                char *_base;
                int      _flag;
                int      _file;
                int      _charbuf;
                int      _bufsize
                char *_tmpfname;
                };
typedef struct _iobuf FILE;

不同的编译器FILE类型的包含的内容不完全相同,但是大同小异。 

C程序调用文件打开函数时,系统会根据文件的情况自动在内存中创建用于存储该文件各类信息的FILE结构体变量,这种结构体变量就是文件信息区。创建的过程函数调用者无须关心。

通过文件信息区中的信息就能访问该文件(访问操作也是通过调用库函数实现,因此具体细节也无须使用者关心)。

2.文件打开和关闭函数

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。

文件的打开和关闭都是通过调用库函数实现的。

文件打开函数:   FILE  * fopen (const char * filename , const char * mode);

FILE * 是指向文件信息区的结构体指针变量;

const char*filename 用于接收完整的文件名(字符串常量的首地址)

const char*mode      用于接收文件打开方式(也是用字符串常量表示):

常用打开方式 说明

"r"

以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。
"w"以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
"a"以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
"r+"以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。
"w+"以“写入/更新”方式打开文件,相当于wr+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
"a+"以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。

文件关闭函数 : int fclose (FILE*stream);

FILE* stream 用于接收指向所要关闭文件的结构体指针变量

文件打开函数调用者需用一个FILE*指针来维护系统所创建的FILE结构的变量。

因此需要创建一个FILE*指针变量来接收fopen函数返回的FILE*指针

3.实现文件的打开与关闭
示例:(文件名根据实际情况来写)
#includeint main ()
{
    FILE* ptr =NULL;
    if((ptr=fopen("C:\\code\\text.txt","r"))==NULL)
    {
        perror("fopen");
        exit(0);
    }
    
    fclose(ptr);                
    ptr=NULL;                 //文件关闭后,FILE结构体销毁,指针要置空                               
    return 0;
}

注意将文件名传入fopen时文件名中的 \ 用另一个\来修饰不然会被解读为转义字符

perror是一个错误警告函数,在这里用于检验文件打开是否成功

文件会占用系统资源,所以打开后要记得关闭。 

四.文件的顺序读写

文件中的数据一般是以字符的方式存储的

1.文件读取示例:

fgets函数--->按行读取文件:

Get a string from a stream.

char * fgets( char *string, intn, FILE *stream);

该函数的功能是按行读取文件,每调用一次会读取文件中一行的数据,第一次调用读第一行,第二次调用读第二行(以此类推)。

将FILE*所操作的文件中n个字节的内容读取到程序中的字符数组string中。

char *string 用于接收字符数组首元素地址,n表示读取的字节数

#includeint main()
{
	FILE* ptrf = NULL;
	char arr[40] = { 0 };                  用于接收从文件中读取的内容

	if ((ptrf = fopen("D:\\Program Files (x86)\\作业文档\\行者视觉组第五次培训\\行者视觉组第五次培训\\2.txt", "r")) == NULL)
	{
		perror("fopen");
		return 1;
	}

	int i = 0;
	for (i = 0; i< 6; i++)
	{
		fgets(arr, 40, ptrf);              读取文件中6行的内容,每读一次打印一次
		printf("%s\n", arr);
	}                                      注意本例中每一次读取都会覆盖arr中原有的内容

	fclose(ptrf);
	ptrf = NULL;
	return 0;
}

注意文件打开方式用"r". 

2.文件的写入示例:

fputs函数:

Write a string to a stream.

int fputs( const char *string, FILE *stream);

函数的功能是将 const char *string 所指向的字符串写入到FILE*stream所操作的文件中

#includeint main()
{
	FILE* ptrf = NULL;
	char arr[40] = { 0 };                  

	if ((ptrf = fopen("D:\\Program Files (x86)\\作业文档\\行者视觉组第五次培训\\行者视觉组第五次培训\\2.txt", "w")) == NULL)
	{
		perror("fopen");
		return 1;
	}

	int i = 0;
	for (i = 0; i< 6; i++)
	{
        scanf("%s",arr);
		fputs(arr,ptrf);
        fputs("\n",ptrf);              		
	}                                      
    printf("文件写入成功\n");
	fclose(ptrf);
	ptrf = NULL;
	return 0;
}

注意文件打开方式用 "w"

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:学习笔记1:C语言文件操作(一)-创新互联
链接分享:http://cdkjz.cn/article/dceesc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220