C语言----文件操作(一)

一:C语言中文件的概念

对于文件想必大家都很熟悉,无论在windows上还是Linux中,我们用文件去存储资料,记录笔记,常见的如txt文件,word文档,log文件等。那么,在C语言中文件是什么样的存在呢,我们又怎么去操作文件,操作文件中又需要注意什么。

在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。例如:

  • 通常把显示器称为标准输出文件,printf 就是向这个文件输出数据;
  • 通常把键盘称为标准输入文件,scanf 就是从这个文件读取数据。

在C语言中对文件的操作也是有规定的。如果不按规定来文件操作很容易出Bug,而且还不好查。

操作文件的正确流程为:

打开文件 --> 读写文件 --> 关闭文件

文件在进行读写操作之前要先打开,使用完毕要关闭。

所谓打开文件,就是获取文件的有关信息,例如文件名、文件状态、当前读写位置等,这些信息会被保存到一个 FILE 类型的结构体变量中。关闭文件就是断开与文件之间的联系,释放结构体变量,同时禁止再对该文件进行操作。

在C语言中,文件有多种读写方式,可以一个字符一个字符地读取,也可以读取一整行,还可以读取若干个字节。文件的读写位置也非常灵活,可以从文件开头读取,也可以从中间位置读取。

二:文件打开和关闭

在C语言中,操作文件之前必须先打开文件;所谓"打开文件",就是让程序和文件建立连接的过程。打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还可以记录当前读写到了哪个位置,下次可以在此基础上继续操作。

1,文件打开

使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为:

bash 复制代码
FILE *fopen(char *filename, char *mode);

入参:filename为文件名(包括文件路径),mode为打开方式,它们都是字符串。

返回值:是一个 FILE 类型的指针,我们可以通过判断 fopen() 的返回值是否和 NULL 相等来判断是否打开失败:如果 fopen() 的返回值为 NULL,那么 fp 的值也为 NULL,此时 if 的判断条件成立,表示文件打开失败

fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中,然后将该变量的地址返回。FILE 结构体定义在 <stdio.h> 头文件中

在上面我们提到fopen的第二个入参是mode,表示文件的打开方式,下面我们列出所有的mode组合。

在调用 fopen() 函数时,这些信息都必须提供,称为"文件打开方式"。最基本的文件打开方式有以下几种:

| 控制读写权限的字符串(必须指明) ||

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

调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为"t")。

读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方式放在读写权限的开头)。例如:

  • 将读写方式放在读写权限的末尾:"rb"、"wt"、"ab"、"r+b"、"w+t"、"a+t"
  • 将读写方式放在读写权限的中间:"rb+"、"wt+"、"ab+"

整体来说,文件打开方式由 r、w、a、t、b、+ 六个字符拼成,各字符的含义是:

  • r(read):读
  • w(write):写
  • a(append):追加
  • t(text):文本文件
  • b(binary):二进制文件
  • +:读和写

2,文件关闭

文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的用法为:

bash 复制代码
int fclose(FILE *fp);

fp 为文件指针。文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生。

下面我们通过具体的代码来展示如何正确的打开和关闭文件(Linux上操作)

cpp 复制代码
#include <stdio.h>

int main()
{
	FILE *fp = fopen("input.txt","r");
	if(fp == NULL)
	{
		printf("open file input.txt fail!\n");
        return 0;
	}
	printf("open file input.txt success!\n");
	fclose(fp);
    return 0;
}
相关推荐
从0至110 分钟前
力扣刷题 | 两数之和
c语言·开发语言
小比卡丘28 分钟前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
一个不知名程序员www31 分钟前
leetcode第189题:轮转数组(C语言版)
c语言·leetcode
冷白白1 小时前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
睡觉然后上课1 小时前
c基础面试题
c语言·开发语言·c++·面试
武昌库里写JAVA1 小时前
【Java】Java面试题笔试
c语言·开发语言·数据结构·算法·二维数组
aaasssdddd965 小时前
python和c
c语言·开发语言·python
凯子坚持 c6 小时前
C语言复习概要(三)
c语言·开发语言
无限大.6 小时前
c语言200例 067
java·c语言·开发语言
无限大.6 小时前
c语言实例
c语言·数据结构·算法