晋城网站建设公司,自助建站帮助网,做风能的网站,小餐馆简易装修C语言文件操作#xff08;1#xff09; 文章目录 C语言文件操作#xff08;1#xff09;一、理解文件1.概述2.分类①.正常角度②.文本文件和二进制文件 二、文件的打开和关闭1.流和标准流2.文件类型指针3.文件的打开和关闭以及使用类型 三、文件缓冲区 一、理解文件
1.概述…C语言文件操作1 文章目录 C语言文件操作1一、理解文件1.概述2.分类①.正常角度②.文本文件和二进制文件 二、文件的打开和关闭1.流和标准流2.文件类型指针3.文件的打开和关闭以及使用类型 三、文件缓冲区 一、理解文件
1.概述
首先我们要知道文件都是存储在磁盘上的而我们平时写在编译器上写的代码等在保存之前都是存储在内存中的也即带电存储计算机内存是一种临时存储器它的内容在计算机关闭或重启时会被清除或者程序退出内存回收数据就丢失了。
如果想要永久化的保存数据我们可以使用存储在磁盘上的文件。
2.分类
①.正常角度
从程序设计的角度来看文件主要分为程序文件和数据文件。程序文件也就是我们常说的.c .obj .exe文件。
而在编程过程中的文件操作主要操作的就是数据文件程序运行时读取数据的文件和程序运行时输出内容的文件。
注意
程序中的数据 ——— 磁盘中的文件这叫输出即写
程序中的数据 ——— 磁盘中的文件这叫输入即读
输出输入是相对于程序中的数据来说的。
②.文本文件和二进制文件
根据数据的存储形式数据文件被称为文本文件或者二进制文件。
数据在内存中以⼆进制的形式存储如果不加转换的输出到外存就是二进制文件。
如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
在内存中字符⼀律以ASCII形式存储数值型数据既可以用ASCII形式存储也可以使用⼆进制形式存储。
举个例子
将100以二进制形式写到文件里出现不认识的函数大家不用担心后续都会提到的呀
#include errno.h
int main()
{int a 100;FILE* fp fopen(test.txt, wb);if (fp NULL){perror(fopen);return 1;}fwrite(a, 4, 1, fp);fclose(fp);fp NULL;return 0;
}那让我们一起来验证一下 1.将这个文件拖到源文件下面 2.右键点击打开方式选项 3.选择二进制编辑器
二、文件的打开和关闭
1.流和标准流
我们程序的数据需要输出到各种外部设备也需要从外部设备获取数据不同的外部设备的输入输出操作各不相同为了方便程序员对各种设备进行方便的操作我们抽象出了流的概念我们可以把流想象成流淌着字符的河。
C程序针对文件、画面、键盘等的数据输入输出操作都是同流操作的。一般情况下我们要想向流里写数据或者从流中读取数据都是要打开流然后操作。
那为什么我们从键盘输入数据向屏幕上输出数据并没有打开流呢
那是因为C语言程序在启动的时候默认打开了3个流
stdin - 标准输入流在大多数的环境中从键盘输入。
stdout - 标准输出流在大多数的环境中输出至显示器界面。
stderr - 标准错误流在大多数环境中输出到显示器界面。
这是默认打开了这三个流我们使scanf、printf等函数就可以直接进行输入输出操作的。
2.文件类型指针
在使用文件打开文件时文件都会在内存中创建一个“文件信息区”存放文件的相关信息这些信息都保存在一个结构体变量里FILE是这个结构体类型创建一个FILE*类型的指针可以指向这个文件信息区并且通过文件信息来访问这个文件通过文件指针变量能够间接找到这个与他关联的文件。
stdin、stdout、stderr三个流的类型是 FILE* 通常称为文件指针。C语言中就是通过 FILE* 的文件指针来维护流的各种操作的。
3.文件的打开和关闭以及使用类型
文件的打开和关闭是依赖与fopen函数和fclose函数
//文件的打开
FILE* fp fopen(test.txt, wb);//注意文件名和打开模式都是两个双引号if (fp NULL){perror(fopen);return 1;}
//文件的关闭fclose(fp);fp NULL;fopen打开成功返回文件信息区的地址打开失败返回NULL。
FILE * fopen ( const char * filename, const char * mode );下面让我们一起来看看mode也就是文件的打开模式
首先我们来看一下r和w
r:文件必须存在不存在的话则打开失败
w:如果文件存在会清空原来内容相当于变成空文件如果不存在则创建一个新的文件。 更多有关mode的类型可以点开这个链接。 fopen的mode
三、文件缓冲区
ANSIC 标准采用“缓冲文件系统”处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每⼀个正在使用的文件开辟⼀块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。
int main()
{FILE* pf fopen(test.txt, w);fputs(abcdef, pf);//先将代码放在输出缓冲区printf(睡眠10秒-已经写数据了打开test.txt文件发现文件没有内容\n);Sleep(10000);printf(刷新缓冲区\n);fflush(pf);//刷新缓冲区时才将输出缓冲区的数据写到文件磁盘//注fflush 在高版本的VS上不能使用了printf(再睡眠10秒-此时再次打开test.tx文件文件有内容了\n);Sleep(10000);//避免是fclose的影响fclose(pf);//注fclose在关闭文件的时候也会刷新缓冲区pf NULL;return 0;
}因为有缓冲区的存在C语言在操作文件的时候需要做刷新缓冲区或者在文件操作结束的时候关闭文件。