当前位置:首页 » 《我的小黑屋》 » 正文

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

17 人参与  2024年05月01日 18:56  分类 : 《我的小黑屋》  评论

点击全文阅读


请添加图片描述

请添加图片描述
Alt

?个人主页:是店小二呀
?C语言笔记专栏:C语言笔记
?C++笔记专栏: C++笔记

?喜欢的诗句:无人扶我青云志 我自踏雪至山巅
请添加图片描述


文章目录

一、文件的概念1.1 文件名:1.2 程序文件和数据文件 二、数据文件(The data file)2.1 二进制文件和文本文件 三、文件的打开和关闭3.1 流和标准流3.1.1 流3.1.2 标准流 四、文件指针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’,则磁盘中占用五个字节二进制形式存储:整型类型占用四个字节
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头文件中有以下的文件类型申明:

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来关闭文件使用文件进行读写,需要三个步骤:

打开文件文件操作关闭文件
打开文件    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语言中有所帮助!


点击全文阅读


本文链接:http://zhangshiyu.com/post/102733.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1