当前位置 博文首页 > weixin_33862514的博客:C语言详解 - 文件

    weixin_33862514的博客:C语言详解 - 文件

    作者:[db:作者] 时间:2021-09-22 22:40

    ?
    1. 需要了解的概念

    需要理解的知识点包括:数据流、缓冲区、文件类型、文件存取方式
    ?

    1.1 数据流:

    指程序与数据的交互是以流的形式进行的。进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。

    1.2 缓冲区(Buffer):

    指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多。

    ?C语言中带缓冲区的文件处理:

    C语言的文件处理功能依据系统是否设置“缓冲区”分为两种:一种是设置缓冲区,另一种是不设置缓冲区。由于不设置缓冲区的文件处理方式,必须使用较低级的I/O函数(包含在头文件io.h和fcntl.h中)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是C的标准函数,跨平台操作时容易出问题。下面只介绍第一种处理方式,即设置缓冲区的文件处理方式:

    当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据,如下图所示:

    事实上,当写入文件时,并不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘,如下图所示。


    1.3 文件类型:

    分为文本文件和二进制文件两种。

    文本文件是以字符编码的方式进行保存的。二进制文件将内存中数据原封不至文件中,适用于非字符为主的数据。如果以记事本打开,只会看到一堆乱码。

    其实,除了文本文件外,所有的数据都可以算是二进制文件。二进制文件的优点在于存取速度快,占用空间小,以及可随机存取数据。

    1.4 文件存取方式:

    包括顺序存取方式和随机存取方式两种。

    顺序读取也就是从上往下,一笔一笔读取文件的内容。保存数据时,将数据附加在文件的末尾。这种存取方式常用于文本文件,而被存取的文件则称为顺序文件。

    随机存取方式多半以二进制文件为主。它会以一个完整的单位来进行数据的读取和写入,通常以结构为单位。


    2. 文本文件操作

    C语言中主要通过标准I/O函数来对文本文件进行处理。相关的操作包括打开、读写、关闭与设置缓冲区。
    相关的存取函数有:fopen(), fclose(), fgetc(), fputc(), fgets(), fputs(), fprintf(), fscanf()等。

    2.1 打开文件

    函数原型为:_CRTIMP FILE * __cdecl fopen(const char *, const char *);

    第一参数为文件名,第二个参数为打开模式。

    打开成功,fopen返回一个结构指针地址,否则返回一个NULL。如果没有指定文件路径,则默认为当前工作目录。如:

    FILE? * fp;
    fp?
    = ?fopen( " c:\\temp\\test.txt " ,? " r " )? // 由于反斜杠\是控制字符,所以必须再加一个反斜杠cs