C语言⽂件操作讲解(1)
目录
前言
一、为什么使用文件
介绍
二、什么是⽂件
介绍
文件的核心特点:
1.程序⽂件
2.数据⽂件
数据文件的核心作用
数据文件的常见类型
三、⼆进制⽂件和⽂本⽂件
介绍
字符与ASCII码对应表
总存储大小
四、⽂件的打开和关闭
介绍
1.流和标准流
三大标准流及其作用
核心特点
2.⽂件指针
3.⽂件的打开和关闭函数介绍:
(1)fopen函数
(2)fclose函数
返回值
总结
前言
本篇文章将讲解为什么使⽤⽂件、什么是⽂件、⼆进制⽂件和⽂本⽂件、⽂件的打开和关闭、⽂件的顺序读写、⽂件的随机读写、⽂件读取结束的判定、⽂件缓冲区等知识的相关内容, 为本章节知识的内容。
一、为什么使用文件
介绍
我们写的程序数据是存储在电脑的内存中,程序退出后内存会回收数据就丢失了,再次运行无法观察到上一次的数据,而文件是存在硬盘中,即使电脑关机文件也不会丢失,所以我们需要使用文件来将数据进⾏持久化的保存。
二、什么是⽂件
介绍
磁盘(硬盘)上的⽂件是⽂件, 但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。
文件的核心特点:
- 持久性:数据保存在外部存储中,程序退出后不会丢失。
- 有序性:数据以字节流形式存储,可按顺序或随机访问。
- 可操控性:支持创建、读取、写入、修改、删除等操作。
1.程序⽂件
程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。
例:
2.数据⽂件
⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。(C语言文件讨论的是数据⽂件)
数据⽂件讲解:
数据文件的核心作用
程序通过数据文件实现数据持久化和数据共享:
- 持久化:程序运行时产生的临时数据(如计算结果、用户信息)可写入数据文件,下次运行时直接读取,无需重复生成。
- 共享性:多个程序可通过读写同一数据文件交换信息(如日志文件、配置文件)。
数据文件的常见类型
根据存储格式,数据文件可分为两类:
|
---|
三、⼆进制⽂件和⽂本⽂件
介绍
根据数据的组织形式,数据⽂件被分为⽂本⽂件和⼆进制⽂件(二、中也有介绍)。 数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。
那么⼀个数据在⽂件中是怎么存储的呢?
先给结论:
字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。(如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),⽽ ⼆进制形式输出,则在磁盘上只占4个字节。)
对: 如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),⽽ ⼆进制形式输出,则在磁盘上只占4个字节。
图示:
作图有些糙,见谅,若以⼆进制形式存储,则按内存中的二进制格式直接存储,所以不详细讲解,
讲一下ASCII码的形式存储:
“10000”以ASCII形式存储时,每个字符对应一个ASCII码值,存储为1字节(8位二进制)。具体如下:
字符与ASCII码对应表
字符 ASCII码值(十进制) 二进制存储形式 '1' 49 00110001 '0' 48 00110000 '0' 48 00110000 '0' 48 00110000 '0' 48 00110000 通过这个表,可知列出图的那些值。
总存储大小
“10000”共5个字符,每个字符占1字节,因此总大小为 5字节(5B)。
四、⽂件的打开和关闭
介绍
1.流和标准流
首先对流讲解:
简单来说:
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。
C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。
标准流:
在C语言中,标准流是程序与外部环境进行输入输出的默认通道,由标准库自动管理,无需手动打开或关闭。
三大标准流及其作用
流名称 文件指针 功能描述 默认设备 标准输入流 stdin
程序读取外部输入的通道 键盘 标准输出流 stdout
程序输出普通信息的通道 显示器(终端窗口) 标准错误流 stderr
程序输出错误信息的通道 显示器(终端窗口) 注意:C语⾔程序在启动的时候,默认打开了这3个流。
核心特点
- 自动关联:程序启动时系统自动创建这三个流,可直接通过
stdin
/stdout
/stderr
指针操作。- 缓冲机制:
stdout
:行缓冲(遇到换行符\n
或缓冲区满时输出)。stderr
:无缓冲(错误信息立即输出,不等待缓冲)。stdin
:行缓冲(读取到换行符时结束输入)。- 重定向支持:可通过操作系统命令将流重定向到文件或其他设备(如
./a.out > output.txt
将stdout
输出到文件)。
记:这三个流这是默认打开的,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。 stdin、stdout、stderr 三个流的类型是: FILE * ,通常称为⽂件指针。 C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。
2.⽂件指针
缓冲⽂件系统中,关键的概念是“⽂件类型指针”,简称“⽂件指针”。 每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名 字,⽂件状态及⽂件当前的位置等)。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的,取名FILE.
在C语言中,文件指针是用于操作文件的核心工具,本质是指向 FILE
结构体的指针,通过它可以访问文件的状态信息(如当前位置、缓冲区、读写模式等)。
声明格式:
FILE* p; // ⽂件指针变量
定义p是⼀个指向FILE类型数据的指针变量。可以使pf指向某个⽂件的⽂件信息区(是⼀个结构体变 量)。通过该⽂件信息区中的信息就能够访问该⽂件。也就是说,通过⽂件指针变量能够间接找到与其关联的⽂件。
3.⽂件的打开和关闭函数介绍:
首先:
1.⽂件在读写之前应该先打开⽂件,在使⽤结束之后应该关闭⽂件。
2.在编写程序的时候,在打开⽂件的同时,都会返回⼀个FILE*的指针变量指向该⽂件,也相当于建⽴了指针和⽂件的关系。
3.记:规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
(1)fopen函数
函数形式:
FILE * fopen ( const char * filename, const char * mode );
介绍:
功能: fopen 函数是⽤来打开参数后续对流的操作是通过 filename 指定的⽂件,同时将打开的⽂件和⼀个流进⾏关联, fopen 函数返回的指针来维护。具体对流(关联的⽂件)的操作是通过参数 mode 来指定的。
参数:
- filename :表⽰被打开的⽂件的名字,这个名字可以绝对路径,也可以是相对路径。
- mode :表⽰对打开的⽂件的操作⽅式,具体⻅下⾯的表格。
返回值:
- 若⽂件成功打开,该函数将返回⼀个指向FILE 对象的指针,该指针可⽤于后续操作中标识对应的流。
- 若打开失败,则返回 NULL 指针,所以⼀定要fopen 的返回值做判断,来验证⽂件是否打开成功。
mode参数:
详略来说:
r | 文本文件的只读取 |
w | 文本文件的只写入 |
a | 文本文件的追加(用的少) |
rb | 二进制文件的只读取 |
wb | 二进制文件的只写入 |
ab | 二进制文件的追加 (用的少) |
细说:
- r与rb读取的文件,如果不存在,则会报错的。
- w与wb写入的文件,如果不存在,则会创建一个该文件名的文件进行写入,但写入的数据会覆盖原来的数据。
代码例子:
#include<stdio.h>
#include<stdlib.h>
int main()
{FILE *p=fopen("date.txt","w");fclose(p);
}
fclose下面会讲解。
(2)fclose函数
函数形式:
int fclose ( FILE * stream );
介绍:
功能:fclose函数是⽤来关闭参数 stream 关联的⽂件,并取消其关联关系。与该流关联的所有内部缓冲区均会解除关 联并刷新:任何未写⼊的输出缓冲区内容将被写⼊,任何未读取的输⼊缓冲区内容将被丢弃。
参数讲解:
stream
:指向FILE
结构体的指针,即需要关闭的文件流(如通过fopen
打开的文件)。返回值
- 成功:返回
0
。- 失败:返回
EOF
(通常为-1
),并设置errno
以指示错误原因(如文件写入错误)。
举例子:
#include<stdio.h>
#include<stdlib.h>
int main()
{FILE *p=fopen("date.txt","w");int i= fclose(p);printf("%d",i);
}
总结
以上就是今天要讲的内容,本篇文章涉及的C语言⽂件操作讲解的知识点为:为什么使⽤⽂件、什么是⽂件、⼆进制⽂件和⽂本⽂件、⽂件的打开和关闭知识的相关内容,为本章节知识的内容,希望大家能喜欢我的文章,谢谢各位,接下来的内容我会很快更新。