【C语言】深入了解文件:简明指南


🌈个人主页:是店小二呀

🌈C语言笔记专栏:C语言笔记

🌈C++笔记专栏: C++笔记

🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅


文章目录

  • 一、文件的概念
    • [1.1 文件名:](#1.1 文件名:)
    • [1.2 程序文件和数据文件](#1.2 程序文件和数据文件)
  • [二、数据文件(The data file)](#二、数据文件(The data file))
    • [2.1 二进制文件和文本文件](#2.1 二进制文件和文本文件)
  • 三、文件的打开和关闭
    • [3.1 流和标准流](#3.1 流和标准流)
      • [3.1.1 流](#3.1.1 流)
      • [3.1.2 标准流](#3.1.2 标准流)
  • 四、文件指针
    • [4.1 文件的打开和关闭](#4.1 文件的打开和关闭)

一、文件的概念

文件的概念:

文件是一种装载数据和信息的载体,存储着用户输入或者处理得到的各种有用信息,例如:文本文档、图片、音乐和视频等等(从硬盘上的文件是文件)。文件与内存的作用都是用于存储数据,区别在于内存是存储CUP的临时数据,无法持久化保存,会导致数据丢失。因此我们可以使用文件进行持久化保存。

1.1 文件名:

  • 一个文件要有一个唯一的文件标识,便于用户的引用
  • 文件名包括三个部分:文件路径+文件名主干+文件后缀(c:\code\test.txt)
  • 为了方便,文件标识常被称为文件名

1.2 程序文件和数据文件

在程序设计上,根据文件功能,一般分为两种文件:程序文件和数据文件

程序文件(用存储程序的文件):

  • 程序文件包括源程序文件(后缀为.c),目标文件(windows环境下后缀为.obj),可执行程序((windows环境下后缀为.exe)
  • 这里里的"程序"跟计算机技术的程序是不相同的,在这里指的为完成某项活动所规定的方式

数据文件(The data file):

  • 当文件内容不是程序时,而是程序运行时读写的数据(可以是读取数据的文件,也可以是输出内容的文件)。

二、数据文件(The data file)

本篇主要谈论数据文件的相关知识。对于之前处理数据的输出输入都是以终端为对象,终端的键盘输入数据,运行结果显示到显示器上。

有时也会把数据信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用(磁盘上的文件)

2.1 二进制文件和文本文件

根据数据的组织形式,数据文件被称为文本文件 或者二进制文件

  • 二进制文件(存储二进制信息的文件):数据在内存中以二进制的形式存储,不加转换的输出到外存(磁盘)
  • 文本文件(存储文本信息的文件):数据在内存中以ASCII的形式存储,需要在存储前转换的输出到外存

注意】:字符一律以ASCII形式存储,数值型数据据可以使用ASCII形式存储,也可以使用二进制形式存储

问题】:存储整数10000,以ASCII形式或二进制形式输出到磁盘中,空间的占用情况?

占用情况】:

  • ASCII形式存储:将每一个数据看成一个字符'1''0''0''0''0''0',则磁盘中占用五个字节
  • 二进制形式存储:整型类型占用四个字节
cpp 复制代码
int main()
{
    int a = 10000;
    FILE* pf = fopen("test.txt", "wb");
    fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
    fclose(pf);
    pf = NULL;
    return 0;
}

检验下:在VS打开二进制文件



三、文件的打开和关闭

3.1 流和标准流

3.1.1 流

不同的外部设备的输入输出操作不同,为了方便统一,对各种设备进行方便的操作,提出了流的概念。

:往往是对一种有序连续具有方向性的数据的抽象描述。(从流读取,先打开流,之后操作)

3.1.2 标准流

问题】:为什么键盘输入数据,向屏幕上输入数据,并没有打开流呢?

在C语言程序启动时,默认打开三个流

  • stdin-标准输⼊流,在大多数的环境中从键盘输入
  • stdout-标准输出流,大多数的环境中输出至显示器界面。
  • stderr-标准错误流,大多数环境中输出到显示器界面。

以上三个流的类型是:FILE .*,通常称为文件指针。并且通过文件指针来维护流的各种操作,也导致使用scanf和printf等函数可以直接进行输入输出操作


四、文件指针

每当使用一个文件,都会在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(文件名,文件状态以及文件当前路径)。

这些信息被保存在一个结构体变量,并且该结构体类型是由系统声明的,取名FILE.(一般通过一个FILE指针来维护这个FILE结构的变量)

VS2013编译环境提供的stdio.h头文件中有以下的文件类型申明:

c 复制代码
struct _iobuf
{
    char *_ptr;
    int _cnt;
    char *_base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char *_tmpfname;
};
typedef struct _iobuf FILE;
注:不同编译器的FILE类型包含的内容不完全相同,但是大差不多

每当打开一个文件,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息(使用者不用关心细节)

文件指针变量指向某个文件的文件信息区(结构体变量 ),并且通过文件信息区就能访问该文件。(通过文件指针间接访问相关的文件)

4.1 文件的打开和关闭

ANSIC规定使用fopen函数来打开文件, fclose来关闭文件使用文件进行读写,需要三个步骤:

  1. 打开文件
  2. 文件操作
  3. 关闭文件
c 复制代码
打开文件
    FILE *fopen(const char *filename,const char *mode);
关闭文件
    FILE *fclose(FILE *stream);

mode表示文件的打开模式,下⾯都是文件的打开模式

⽂件使⽤⽅式 含义 如果指定⽂件不存在
"r"(只读) 为了输⼊数据,打开⼀个已经存在的⽂本⽂件 出错
"w"(只写) 为了输出数据,打开⼀个⽂本⽂件 建⽴⼀个新的⽂件
"a"(追加) 向⽂本⽂件尾添加数据 建⽴⼀个新的⽂件
"rb"(只读) 为了输⼊数据,打开⼀个⼆进制⽂件 出错
"wb"(只写) 为了输出数据,打开⼀个⼆进制⽂件 建⽴⼀个新的⽂件
"ab"(追加) 向⼀个⼆进制⽂件尾添加数据 建⽴⼀个新的⽂件
"r+"(读写) 为了读和写,打开⼀个⽂本⽂件 出错
"w+"(读写) 为了读和写,建议⼀个新的⽂件 建⽴⼀个新的⽂件
"a+"(读写) 打开⼀个⽂件,在⽂件尾进⾏读写 建⽴⼀个新的⽂件
"rb+"(读写) 为了读和写打开⼀个⼆进制⽂件 出错
"wb+"(读写) 为了读和写,新建⼀个新的⼆进制⽂件 建⽴⼀个新的⽂件
"ab+"(读写) 打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写 建⽴⼀个新的⽂件

以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二C语言笔记,希望对你在学习C语言中有所帮助!

相关推荐
q567315231 分钟前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
阿伟来咯~11 分钟前
记录学习react的一些内容
javascript·学习·react.js
JSU_曾是此间年少13 分钟前
数据结构——线性表与链表
数据结构·c++·算法
许野平26 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
也无晴也无风雨29 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
Suckerbin33 分钟前
Hms?: 1渗透测试
学习·安全·网络安全
狂奔solar38 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
水豚AI课代表44 分钟前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
聪明的墨菲特i1 小时前
Python爬虫学习
爬虫·python·学习
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos