文件的打开、关闭、读写

一、简单介绍

1. 文件是什么?

文件通常是在磁盘或固态硬盘上的一段已命名的存储区,是指存放在外部存储介质(可以是磁盘、光盘、磁带等)上的数据集合。C把文件看作是一系列连续的字节,每个字节都能被单独读取。

2. 文件的操作流程

打开(建立)文件–>读写文件–>关闭文件

3. 如何操作文件

C语言是通过文件指针变量的操作来实现对文件的具体访问。

  • 先了解一下 FILE结构体类型
    要调用一个文件,一般需要该文件的一些信息,例如:文件当前的读写位置、与该文件对应的内存缓冲区的地址、缓冲区中未被处理的字符串、文件操作方式等。缓冲文件系统会为每一个文件系统开辟一个“文件信息区”,包含在头文件stdio.h中,被定义为FILE类型数据。注意 FILE 应为大写,是由系统定义的一个结构体,该结构体中包含了文件名、文件使用方式、当前位置等信息。
    系统定义的FILE原型
  • 文件指针(指向FILE类型结构体的指针变量):
    例:FILE *fp;
    fp是一个指向FILE类型结构体的指针变量,可以使fp指向某一个文件类型的结构体变量,从而通过该结构体变量中的文件信息访问该文件,也就是说通过该文件指针变量能够找到与它相关的文件。

二、对文件的操作

对文件的操作都是通过标准函数来实现的。

1. 文件的打开与关闭
1.1打开文件

所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他操作。

  • 函数:fopen();

  • 函数原型:FILE * fopen(char *filename, char * mode);

  • 参数:
    filename–这是 C 字符串,包含了要打开的文件名称。
    mode–这是 C 字符串,包含了文件访问模式。

  • 功能:使用给定的模式 mode 打开filename 所指向的文件。文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL。

  • 打开方式:
    mode

如果希望接收 fopen() 的返回值,就需要定义一个FILE 类型的指针
举例:

  • 打开一个和可执行文件在相同路径下(文件夹相同)的文本文件,只需要写文件名即可。
    FILE *fp;
    fp = fopen(“test.txt”, ”r”);

  • 打开一个D盘下code文件夹下的文本文件test.txt。 (数据文件与程序文件分别存放在不同的文件夹,就必指定完整的路径和文件名)
    FILE *fp;
    fp = fopen(“d:\\code\\test.txt”, ”rt”);

    FILE * fp;
    fp = fopen(“d:/code/test.txt”, ”rt”);
    以上两种方法属于嵌入式文件方法,即文件名及其所在路径已在程序中设定。

  • 还有一种由键盘输入所要打开的文件名及其路径。
    char filename[40];
    gets(filename);
    fp = fopen(filename, “r”);

!!!!由以上例子可以看出,在打开一个文件时,通知给编译系统有三个信息

  1. 需要打开的文件名。

  2. 使用文件的方式(读、写等)

  3. 用哪个指针变量指向被打开的文件。

1.2 关闭文件

在程序中,当对一个文件的操作使用完毕后,应将其关闭,断开文件指针与该文件之间的联系,防止文件遭到其他操作的破坏。使用 fclose() 函数将指定的文件关闭,并将FILE文件指针的相关资源及所占用的缓冲区归还给系统。

  • 函数原型:int fclose( FILE *fp );
  • 功能:将文件指针fp所指向的文件关闭。
  • 返回值:如果文件成功关闭,则该方法返回零。如果失败,则返回 EOF。
2. 文件的读写

文件的读写是通过读写函数实现的。
根据文件的读写方式不同,文件可分为文件的顺序读写和文件的随机读写

  • 顺序读写是指将文件从头到尾逐个数据读出或写入,即读写文件子还能从头开始,顺序读取各个数据。
  • 随机读写是可移动文件内部的位置指针到需要读写的位置,再进行读写。

位置指针:
在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节。
文件内部的位置指针与C语言中的指针不是一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是隐藏的。

2.1 文件的顺序读写

首先看看所要了解的函数:

单字符读写函数:fgetc 和 fputc
字符串读写函数:fgets 和 fputs
格式化读写函数:fscanf 和 fprintf
数据块读写函数:fread 和 fwrite

2.1.1 单字符读写函数(fgetc fputc)

字符读写函数是以字符(字节)为单位的读写函数,每次可以从文件读出或向文件写入一个字符

字符读函数fgetc():

  • 函数原型:int fgetc(FILE *fp);
  • 功能:读取文件指针fp目前所指文件位置中的字符,读取完毕,文件指针自动往后移一个字符位置,若文件指针已经到文件结尾,返回-1.

字符写函数fputc():

  • 函数原型:int fputc(char ch, FILE *fp);
  • 功能:将字符ch写入文件指针fp所指向的文件位置,成功时返回字符的asc码,失败时返回EOF(在stdio.h中,符号常量EOF的值等于-1)。

举例:

#include<stdio.h>
#include<stdlib.h>
int main() {
   
	FILE *fp;
	char filename[40];	
	char ch;	
	int i;
	printf("输入文件名:\n");
 	gets(filename);
 	fp = fopen(filename, "a+");     //读写打开文件,允许读,或在文件末尾写数据。 
 	if(fp == NULL) {
   
 	      printf("\n打开文件失败\n");
              exit(0);
	}
 	ch 
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值