如何给网站加引导页,wordpress如何改页面模板,id注册,做三个月网站 广告收入⽬录 一 文件操作的引入 1 为什么使⽤⽂件#xff1f; 2 什么是⽂件#xff1f; 3 文件分类#xff08;1 从⽂件功能的⻆度来分类#xff1a;程序⽂件/数据⽂件 2根据数据的组织形式#xff1a;为⽂本⽂件/⼆进制⽂件#xff09; 二 ⽂件的打开和关闭 1 … ⽬录 一 文件操作的引入 1 为什么使⽤⽂件 2 什么是⽂件 3 文件分类1 从⽂件功能的⻆度来分类程序⽂件/数据⽂件 2根据数据的组织形式为⽂本⽂件/⼆进制⽂件 二 ⽂件的打开和关闭 1 流和标准流其中标准流在C语⾔程序启动的时候默认打开 2 ⽂件指针⽂件类型指针 3 ⽂件的打开和关闭 三 ⽂件的顺序读写 1 fgect函数 2 fputc函数 3 fgets函数 4 fputs函数 5 fscanf函数 6 fprintf函数 7 fread函数 8 fwrite函数 四 ⽂件的随机读写 1 fseek函数 2 ftell函数 3 rewind函数 五 ⽂件读取结束的判定 1 ⽂本⽂件读取是否结束/⼆进制⽂件的读取结束判断 2 ⽂本⽂件的例⼦ 3 ⼆进制⽂件的例⼦ 六 ⽂件缓冲区 一 文件操作的引入
1 为什么使⽤⽂件 为了将数据进⾏持久化的保存如果我们没有文件我们写的程序的数据其实是存储在电脑的内存中当我们程序一退出内存回收数据就会丢失等再次运⾏程序就看不到上次程序的数据。
2 什么是⽂件
2.1 概念磁盘硬盘上的⽂件是⽂件。 2.2 ⽂件名 ⼀个⽂件要有⼀个唯⼀的⽂件标识以便⽤⼾识别和引⽤。 ⽂件名包含3部分⽂件路径⽂件名主⼲⽂件后缀 例如 c:\code\test.txt 为了⽅便起⻅⽂件标识常被称为⽂件名。 2.3路径的两种形式相当路径/绝对路径 3 文件分类1 从⽂件功能的⻆度来分类程序⽂件/数据⽂件 2根据数据的组织形式为⽂本⽂件/⼆进制⽂件 3.1 从⽂件功能的⻆度来分类 程序⽂件 程序⽂件包括源程序⽂件后缀为.c,⽬标⽂件windows环境后缀为.obj,可执⾏程序windows环境后缀为.exe。 数据⽂件 程序运⾏时读写的数据⽐如程序运⾏需要从中读取数据的⽂件或者输出内容的⽂件。 3.2 根据数据的组织形式 ⼆进制⽂件数据在内存中以⼆进制的形式存储如果不加转换的输出到外存的⽂件中就是⼆进制⽂件。 ⽂本⽂件如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。 二 ⽂件的打开和关闭 1 流和标准流其中标准流在C语⾔程序启动的时候默认打开
1.1 流因为不同的外部设备的输⼊输出操作各不相同此时为了⽅便程序员对各种设备进⾏⽅便的操作便引出了流其实流就是为了⽅便程序员对各种设备读取数据或者输出数据的操作,而抽象出的概念这里我们可以把流想象成流淌着字符的河。
1.2标准流的引入
在C语言中我们如何对针对⽂件、画⾯、键盘等的数据输⼊输出操作呢其实C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下我们要想向流⾥写数据或者从流中读取数据都是要打开流然后操作。那为什么我们使用scanf和printf函数并没有直观的感觉到呢这时候就要引入标准流。
1.3 标准流 C语⾔程序在启动的时候默认打开了3个流 •stdin - 标准输⼊流在⼤多数的环境中从键盘输⼊scanf函数就是从标准输⼊流中读取数据。 •stdout - 标准输出流⼤多数的环境中输出⾄显⽰器界⾯printf函数就是将信息输出到标准输出 流中。 •stderr - 标准错误流⼤多数环境中输出到显⽰器界⾯。 stdin、stdout、stderr 三个流的类型是 FILE * 通常称为⽂件指针。 2 ⽂件指针⽂件类型指针 2.1 概念 C语⾔中我们就是通过 FILE* 的⽂件指针来维护流的各种操作的。我们在对文件进行操作时必须使用FILE*指针。 每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区⽤来存放⽂件的相关信息如⽂件的名字⽂件状态及⽂件当前的位置等。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的取名 FILE。不同的C编译器的FILE类型包含的内容不完全相同但是⼤同⼩异。 2.2 创建⼀个FILE*的指针变量 int main() {FILE* pf;//⽂件指针变量 return 0 } 定义pf是⼀个指向FILE类型数据的指针变量。我们可以使文件指针变量pf指向某个⽂件的⽂件信息区是⼀个结构体变量。通过该⽂件信息区中的信息就能够访问该⽂件。也就是说通过⽂件指针变量能够间接找到与 它关联的⽂件。 比如 3 ⽂件的打开和关闭 3.1 ⽂件在读写之前应该先打开⽂件在使⽤结束之后应该关闭⽂件。所以我们使用文件的固定步骤为打开⽂件、文件操作、关闭⽂件。这些过程需要FILE*的指针变量来连接其实我们在编写程序的时候在打开⽂件的同时都会返回⼀个FILE*的指针变量指向该⽂件也就相当于建⽴了指针和⽂件的关系。而ANSI C 规定使⽤ fopen 函数来打开⽂件 fclose函数来关闭⽂件。 3.2使用文件的固定步骤 fopen 函数原型 fclose函数原型 3.3 文件的打开模式 其中常用的只要几个。
1 三 ⽂件的顺序读写
下面我们来介绍几个顺序读写函数我们可以利用这几个顺序读写函数在结和文件的打开模式对文件进行操作。
顺序读写函数 1 fgect函数 1.1 这是一个字符输入函数个适用于所有输入流。 示例 这里我们运用r只读的方式打开文件这里我们是进行字符的读取所以我们应在相应文件中放上内容 再看相应文件中的内容 再看运行结果 注意在读取字符时它会从第一个字符的位置开始读取当每次读取完成后光标会往后移动一位利用这一特性再利用循环进行读取这样我们就可以达到像读取字符串一样当我们想读取的个数比读取文件中的个数多会发生什么呢这时候多余的会打印出错误信息这里我就不举例了感兴趣的可以自己试一试。特别注意fgetc在遇到空格时会选择跳过 1.2 这个函数适用于使用输入流那意味着对于标准流也有用。 这里我们先输入一个字符便可以打印出相应的字符。 2 fputc函数
2.1 这是一个字符输出函数适用于所有输出流。 示例 现在我们打开文件观察其运行结果 这里我们发现文件中已经有了相应的字符但是我们·发现文件中的字符全部都在一行这是为什么呢其实fputc函数也能识别”\0只要其识别到”\0结束标识符时才会换行。那这里有一个问题很值得我们思考上面的fgect函数适用于使用输入流是一个字符输入函数而fputc函数这个函数适用于使用输出流是一个字符输出函数。那么这两个函数是否呢结和使用呢
将fgect函数和fputc函数结和使用 这里我们发现将fgect函数和fputc函数结和使用结果是不行的因为w模式是写入模式会清空文件内容在写入之后在进行读取操作不会得到任何内容。
2.2 这个函数适用于使用输出流那意味着对于标准流也有用。 3 fgets函数
这是一个文本行输入函数适用于所有输入流。(文本行即能对一行操作 这个函数有三个参数分别是存放读取字符串的地址、读取的字符个数、文件指针。
示例 我们看一看文件中都内容 4 fputs函数
这是一个文本行输出函数适用于所有输出流。(文本行即能对一行操作 这个函数有两个参数分别是字符串地址和文件指针
示例1
结果 示例2 结果 我们来比较一下上面两个代码运行结果我们观察看到输入的字符相同只是一个有换行一个没有对应的结果便是有换行的结果在文件在分为两行没有换行的则在一行所以 fputs函数是会识别换行符\n要想结果换行使用fputs函数就必须包含换行符。 5 fscanf函数
这是一个格式化输⼊函数函数适用于所有输入流格式化即特定的格式可以包含多个类型。 我们发现这个函数的原型有些神奇他的参数里面居然有个省略号也就是说它支持传入的参数个数是无限制的要想熟练使用fscanf函数就得仿造scanf函数它们只相差一个参数fscanf函数比scanf函数多了一个文件指针。
示例
文件内容 运行结果 6 fprintf函数
这是一个格式化输出函数适用于所有输出流格式化即特定的格式可以包含多个类型。 它的使用可以类比于printf函数比printf函数多了一个参数 文件指针
示例 7 fread函数
这是一个⼆进制输⼊函数适用于文件输入流。 这个函数传入的参数就相对来说复杂了一些分别是存放字符串的地址、数据的字节大小、数据的数量、文件指针。
示例 8 fwrite函数 这是一个⼆进制输出函数适用于文件输出流。 示例 四 ⽂件的随机读写
1 fseek函数 这个函数可以根据⽂件指针的位置和偏移量来定位⽂件指针⽂件内容的光标。 int fseek ( FILE * stream, long int offset, int origin ); 第一个参数就是文件指针没什么好说的通过上前面的学习我们发现这种文件操作函数基本都要输入文件指针。 第二个参数是偏移量参数可以为正数也可以为负数。 第三个参数是起始位置 C语言为我们提供了 三个起始位置 文件头 SEEK_SET 0当前位置 SEEK_CUR 1 文件尾 SEEK_END 2 2 ftell函数 这个函数可以返回文件指针相对于起始位置的偏移量 long int ftell ( FILE * stream ); 我们直接传文件指针就行他会返回光标位置相较于文本最开始的偏移量 3 rewind函数
这个函数可以让文件指针的位置回到文件的起始位置。 void rewind ( FILE * stream ); 示例 五 ⽂件读取结束的判定
1⽂本⽂件读取是否结束/⼆进制⽂件的读取结束判断
我们都知道EOF是文件结束的标志那么feof呢 牢记在⽂件读取过程中不能⽤ feof 函数的返回值直接来判断⽂件的是否结束。 feof 的作⽤是当⽂件读取结束的时候判断读取结束的原因是否是遇到⽂件尾结束。 ⽂本⽂件读取是否结束 判断返回值是否为 EOF fgetc 或者 NULL fgets •fgetc 判断是否为 EOF . •fgets 判断返回值是否为 NULL . ⼆进制⽂件的读取结束判断 判断返回值是否⼩于实际要读的个数。 •fread判断返回值是否⼩于实际要读的个数。 2 ⽂本⽂件的例⼦ 3 ⼆进制⽂件的例⼦ 运行结果 六 ⽂件缓冲区
缓冲⽂件系统是指系统⾃动地在内存中为程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。在C语言文件操作时其实我们读取文件内容和输入内容到文件时并不是直接对其进行操作的而是通过文件缓冲区操作。那为什么会有⽂件缓冲区呢其目的是为了提高编程效率假如没有⽂件缓冲区这是我们要对一个字符串操作时如果没有⽂件缓冲区我们就要不断对每个字符重复的进行操作如果有了⽂件缓冲区我们把像输入的字符一个一个先放入缓冲区等到积攒到了一定的数量超过缓冲区范围再把缓冲区的字符一次性放到硬盘中这样就能减少系统的运行压力。记住缓冲区的⼤⼩根据C编译系统决定的。 本篇文章就到此结束欢迎大家订阅我的专栏欢迎大家指正希望有所能帮到读者更好了解⽂件操作相关知识 觉得有帮助的还请三联支持一下~后续会不断更新C/C相关知识我们下期再见。