C语言绝对值得一看的常识讲解:文件操作篇 篇1

关于文件操作这一部分的常识讲解,我考虑了很久,一直犹豫到底要不要出——担心这种内容自己无法梳理清楚,讲解清楚,而且感觉自己的理解也并不是很到位。之所以最后大家还是能看到这篇文章,可能是因为我个人更喜欢知识的连贯性,而后面的有些有趣代码需要这部分知识做支撑,所以就斗胆在这里浅讲一下文件操作方面的常识,还望各位海涵。

文件是指存储在外部介质(如硬盘)上的数据的有序集合。操作系统是以文件为最基本单位对数据进行管理的。每个文件都有一个唯一的文件名。操作系统通过不同的文件名来区分不同的数据集合。为什么要有文件呢?如果没有文件,那么我们编写的程序的数据是存储在电脑的内存中的,如果程序退出,内存回收,数据就销毁了,我们下次再打开程序也不会有上次的数据,那么为了保留程序中的数据,我们就理所应当地引入文件的使用。

目录

1.文件概述

1.1文件名

1.2普通文件和设备文件

1.3ASCII文件和二进制文件

1.4流文件

1.5文件指针

1.6几个常量

2.文件的打开与关闭

2.1文件打开函数

2.2文件关闭函数


1.文件概述

文件是指存储在外部介质上的数据的有序集合。每个游学数据集合都有一个名称,称为文件名。文件一般存储在外部介质上,当使用文件时才将其装入内存。(这里也暗含一个知识点就是,系统处理的是内存中的数据)

按照不同的角度,文件可以分为不同的类别。从用户角度看,文件分为普通文件和设备文件;从文件内部的编码方式看,文件分为ASCII文件和二进制文件。

1.1文件名

文件名是文件的唯一标识。(可类比变量名记忆,即文件看作一种数据类型,文件名就是建立的一个该数据类型变量的名字。)文件名的一般结构如下:

主文件名.扩展名

其中,扩展名一般用于判断文件的类型,有时候文件名会省略扩展名。

文件名还可以增加磁盘目录的路径信息。

c:\code\test.txt

1.2普通文件和设备文件

普通文件是指存储在磁盘等外部介质上的、有序的数据集合。普通文件可以是源程序文件、目标文件、可执行文件,也可以是一组待输入处理的原始数据,或者一组处理后的数据。

设备文件就是指与主机相连的各种外部设备,例如,显示器、鼠标、打印机、键盘等。在操作系统中,把外部设备也作为文件来处理,它们的输入与输出等同于磁盘文件的读和写。一般,把显示器定义为标准输出文件,键盘则定义为标准的输入文件。

1.3ASCII文件和二进制文件

①ASCII文件,也称为文本文件。文本文件的扩展名一般为“txt”。这种文件的每个字符都对应一个字节,用于存放相应字符的ASCII码,也就是存放字符的存储形式的编码。例如,整数12345在ASCII文件中的存储形式为:

如果大家对于之前讲的字符的ASCII码值比较熟悉,不难发现上面的五个框里面分别是字符‘1’、‘2’、‘3’、‘4’和‘5’的ASCII码值,而整数12345在ASCII文件中共占用5个字节。换句话说,ASCII文件就是把数据拆分为一个个字符(不用考虑本身的数据类型),再把每个字符对应的ASCII码值存在文件中保存

ASCII文件可以在屏幕上按字符形式显示。C程序的源文件是ASCII文件。

②二进制文件也称为二进制码文件。它把数据按二进制编码存放在文件中。例如整数12345在二进制文件中表示为:

这里的话,就是两个框数字连在一起就是整数12345的二进制数,只占用2个字节。那么大家可以理解为二进制文件就是以数据的二进制数形式存储,具体字节数看数据的二进制数位数以字节为单位

二进制文件不易于阅读。

1.4流文件

C语言对文件操作时,并不区分文件的类别。不论普通文件还是设备文件,也不论是ASCII文件还是二进制文件,C程序把文件一律看成“字节流”,以字节(每个字节可能是一个字符,也可能是一个二进制代码)为单位进行处理。处理字节流时,输入/输出的开始和结束都由程序控制,不受物理符号(如回车符)的影响。

按这种方式操作的文件,称为“流文件”。这种方式有别于其他高级语言程序的操作方式。

1.5文件指针

处理文件时,系统按照FILE结构体类型为每个文件分配一个存储区域,用于存放文件的有关数据信息。例如,文件名、文件的状态、文件的当前位置等。结构体FILE的类型是由系统定义的,该结构体数据类型的定义位于头文件“stdio.h”中。

C语言程序中,定义FILE结构体类型的指针变量(简称为文件指针)来指向具体的文件。

1.6几个常量

ANSI C中,引用几个常量来标识文件的处理状态。常用的有EOF和NULL。

EOF,值为-1,一般表示文件结束或处理文件时出错。

NULL,值为0,一般表示打开文件失败。

1.7文件缓冲区

操作系统对磁盘文件的存取速度远远小于对内存的存取速度,为了提高数据的存取效率,应用程序一般通过文件缓存区对磁盘文件进行读写操作。所谓文件缓存区是在应用程序和磁盘文件之间设置的一段连续的内存空间。应用程序与磁盘文件的数据交换通过缓冲区来完成。

文件缓存区的大小由具体的语言标准规定。由于磁盘数据的组织方式是按扇区进行的,每个扇区一般为512B,一般微机中的C语言编译系统也把缓冲区大小定为512B,恰好与磁盘的一个扇区大小相同,从而保证磁盘操作的高效性。

2.文件的打开与关闭

在进行读/写文件之前需要先打开该文件,使用完毕后应该关闭文件。

所谓打开文件,就是建立与文件有关的各种控制信息,使文件指针指向该文件,以便进行操作。

所谓关闭文件,就是断开文件指针与文件之间的联系,禁止再对该文件进行操作。这样,既防止了对该文件的误操作,也节省了系统资源。

C语言中的文件操作,一般通过引用标准库函数来完成。文件操作的一般过程如下:

①打开/建立文件;

②进行读/写,即进行文件操作;

③关闭文件。

关于所有文件的操作,都遵循这个过程。

为什么要关闭文件?

每打开一个文件都会占用一个文件缓冲区,操作系统需要对每一个打开的文件进行管理,因此,同时可以打开的文件是有限的,如果不及时关闭就会造成浪费操作系统的文件资源。同时,我们关闭文件会强制将文件缓冲区的数据写入文件,因为数据不是直接写入文件中,而是先写入文件缓存区,当文件缓冲区满时再写入文件。如果文件缓存区不满时发生程序异常终止,缓冲区的数据就会丢失。

2.1文件打开函数

ANSI C使用fopen函数来打开一个文件。其调用的一般形式为:

FILE*文件指针名

文件指针名= fopen ( 文件名, 文件使用方式 );

“文件指针名”必须使被说明为FILE类型的指针变量;“文件名”是将被操作文件的文件名,可以用字符串常量或字符串数组表示‘“文件使用方式”是指对文件操作的类型

文件的使用方式共有12种,如下图:

 ①文件使用方式由“r”、“w”、“a”、“t”、“b”、“+”等6个字符组成。各个字符的含义如下:

r(read):读

w(write):写

a(append):添加

t(text):文本文件,t可省略不写

b(binary):二进制文件

+:读和写

②用“r”方式打开一个文件时,使该文件必须是已经存在的。使用时,只能从该文件读出数据。

③用“w”方式打开一个文件时,若打开的文件不存在,则以指定的文件名创建一个新文件;若打开的文件已经存在,则将该文件删去,重建一个新文件。打开文件后,只能向其中写入。

④若要向一个已存在的文件附加新的信息,只能用“a”的方式打开文件。该文件必须是已经存在的,否则会出错。

⑤在打开一个文件时,如果出错,fopen将返回一个NULL值。在程序中,可以根据这一信息来判断是否完成了“打开文件”的工作,并做相应的处理。

if ( ( fp = fopen("c:\code\test.txt","r" ) ) ==NULL )
{
    printf("\nerror on open this file!");
    exit( 0 );//作用是关闭所有文件,退出程序
}

 ⑥如果文件名(路径)中出现有反斜线,则需要用两个反斜线“\\”表示。其中,第一个反斜线表示转义字符,第二个表示路径结构。

⑦表示文件使用方式的6个字符,结合使用时不区分前后次序。

2.2文件关闭函数

文件使用完毕,应当及时使用文件关闭函数把该文件关闭,从而避免文件的数据丢失等错误。(原因前面讲解过了,大家要多多留意)ANSI C中使用fclose函数来关闭文件,其调用的一般形式为:

fclose(文件指针);

若打开文件时,把指针值赋给fp,现在通过fclose关闭了该文件,则执行该命令后fp将不再指向该文件。

正常关闭文件时,fclose函数的返回值为0.若fclose函数的返回值为0。若fclose函数的返回非零值,则表示有错误发生,可以用ferror函数来测试该返回值。 

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值