【C语言】计算机中的流和文件概述(文件的概念及打开关闭)

目录

一、计算机中流

二、文件 

1.文件的概念

2.文件的分类

3.文件的缓冲区

         4.文件指针

三、文件的打开和关闭


一、计算机中流

在C语言中,将在不同的输入/输出设备之间进行传递的数据抽象为“流”。

当一段程序中调用scanf()函数时,会有数据经过键盘流入存储器,当调用printf()函数,会有数据从存储器流向屏幕。

流实际上就是一个字节序列,输入函数的字节序列被称为输入流,输出函数的字节序列称为输出流。

根据数据形式,输入输出流可以分为文本流(字符流)二进制流

文本流和二进制流的主要差异

  • 在文本流中输入输出的数据是字符或字符串,可以被修改;
  • 二进制流中输入输出是一系列二进制的0、1代码,不能以任何方式修改。

二、文件 

1.文件的概念

文件是存储在外部介质上的数据集合。

一个文件需要有唯一的文件标识,以便用户根据标识找到唯一确定的文件,方便用户对文件的识别和引用。

文件标识的组成部分:文件路径、文件名主干、文件扩展名

操作系统以文件为单位,对数据进行管理,若想找到存放在外部介质上的数据,必须先按照文件名找到指定文件,再从文件中读取数据。

2.文件的分类

文件可以分为两类:①文本文件;②二进制文件

(1)文本文件:(又称ASCII文件)该文件中一个字符占用一个字节,存储单元中存放单个字符对应的ASCII 码

例如:需要存储一个整型数据112185,则数据在磁盘上存放的形式如下:

 特点:文本文件中的每个字符都需要占用一个字节的存储空间,并且在存储是需要进行二进制和ASCII码之间的转换,因此使用这种方式既消耗时间,又浪费空间

(2)二进制文件:数据在内存中以二进制形式存储,如果不加转换地输出到外存,则输出的文件就是一个二进制文件。

二进制文件是存储在内存的数据的映像,也称映像文件。若使用二进制文件存储112185,则数据首先被转换为二进制的整数1101 1011000111001,将该二进制整数存放在磁盘上。

 使用二进制文件存放时,只需要4个字节的存储空间,并且不需要进行转换,如此既节省时间,有节省空间。但这种存放方法不够直观,需要经过转换后才能看到存放的信息

3.文件的缓冲区

C语言使用的文件系统分为:缓冲文件系统(标准I/O)非缓冲文件系统(系统I/O)

ANSIC标准采用“缓冲文件系统”处理文件。

缓冲文件系统:系统自动在内存中为正在处理的文件划分出一部分内存作为缓冲区。当从磁盘读入数据时,数据要先送到输入缓冲区,然后再从缓冲区中逐个把数据传送给程序中的变量;当内存向磁盘中输出数据时,必须先把数据装入输出文件缓冲区,装满后,才将数据从缓冲区写到磁盘。

使用文件缓冲区可以减少磁盘的读写次数,提高读写效率。通过文件缓冲区读写文件的过程如下:

4.文件指针

在C语言中,所有的文件操作都必须依靠指针来完成,因此在对文件进行操作之前,必须先使指针与文件建立联系。

文件指针的定义格式如下:

FILE *变量名;

例如:FILE *fp;//定义了一个FILE类型的指针变量fp,但该指针还没有与文件建立联系。通常使用fopen()函数为文件指针变量赋值。

一个文件指针变量只能指向一个文件。即要操作多少个文件,就需要定义同样数量的文件指针。


三、文件的打开和关闭

在对文件进行读写之前,需要先打开文件;读写结束后,需要及时关闭文件。

(1)打开文件

C语言提供了一个专门用于打开文件的函数——fopen()函数,函数原型如下:

FILE*  fopen(char*  filename,  char*  mode);

【注释】

  • 返回值类型FILE*表示该函数返回值为文件指针类型;
  • 参数filename用于指定文件的绝对路径,即用来确定文件包含路径名、文件名主干、扩展名的唯一标识;
  • 参数mode用于指定文件打开模式

·文件正常打开,函数返回指向该文件的文件指针;文件打开失败,函数返回NULL。

一般在调用该函数后,为了保证程序的健壮性,会进行一次判空操作。

FILE *fp;
fp=fopen("D:\\test.txt","r");
if(fp==NULL)
{
    printf("FILE open error");
    exit(0);
}

(2)关闭文件

关闭文件的目的是释放缓冲区以及其他资源。若打开的文件不关闭,将会慢慢耗尽系统资源。

C语言提供了一个专门用于关闭文件的函数——fclose(),函数原型:

int fclose(FILE* fp);

【注释】

  • 返回值类型为int,如果成功关闭则返回0,否则,返回EOF;
  • 函数中的参数fp表示待关闭的文件

(3)文件的打开模式

常见的打开模式如下表:

打开模式 名称 描述
r/rb 只读 以只读的方式打开一个文本文件/二进制文件,如果文件不存在或无法找到,fopen()函数调用失败,返回NULL。
w/wb 只写 以只写的方式打开一个文本文件/二进制文件,如果文件已存在,重写文件
a/ab 追加模式 以只写的方式打开一个文本文件/二进制文件,只允许在该文件的末尾追加数据,如果文件不存在,则创建新文件
r+/rb+ 读取/更新模式 以读/写的方式打开一个文本文件/二进制文件,如果文件不存在,fopen()函数调用失败,返回NULL。
w+/wb+ 写入/更新模式 以读/写的方式打开一个文本文件/二进制文件,如果文件已存在,重写文件
a/ab+ 追加/更新模式 打开一个文本文件/二进制文件,运行进行读取操作,但只允许在文件末尾添加数据,如果文件不存在,重新创建新文件。

在对文件进行操作时,需要根据本次操作的目的,使用不同的模式打开文件。

猜你喜欢

转载自blog.csdn.net/Jacky_Feng/article/details/109247048
今日推荐