为什么使⽤⽂件?
什么是⽂件?
程序⽂件:
数据⽂件
在以前各章所处理据的输⼊输出都是以终端为对象的,即从终端的键盘输⼊数据,运⾏结果显⽰到显⽰器上。 其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使⽤,这⾥处理的就是磁盘上⽂件。
而我们今天本篇文件操作文章讨论的对象就是数据⽂件,并不是程序文件.接下来讲的都是跟数据文件有关的知识点。
文件名
这里的c:\code\mycode\就是文件路径,test就是文件名主干,.txt就是文件后缀。
文件中不能包含这些字符: * ? " < > |
文件的后缀名决定了一个文件的默认打开方式
文件路径指的是从盘符到该文件所经历的路径中各符号名的集合
二进制文件和文本文件
二进制文件
其在内存中的存储原形式为10 27 00 00 ,所以直接将其不加转换的存入到二进制文件中,(都还是十六进制形式)
对于最开始的00000000,我们也不清楚,可能是编码什么的,跟我们存入的数据没关系,没必要去理解。
要打开二进制文件并使其正常显示出其数据,我们就必须用二进制编译器,其它编译器都会显示出乱码(我们看不懂)
文本文件
如上图,文本文件就是将其数据转换为ascall码形式的数据再储存在文本文件中。这样每个字符都要转换为ascall码值,所以就由四个字节变为5个字节去存储在文本文件中。
当我们打开文本文件时,显示出的依然是我们原来的值。举个例子,比如我们将400000存入文本文件时,我们打开文本文件后显示出来的是400000(原数据),并不是地址形式的数据。(大部分编译器都能打开并正常显示出数据)
文件的打开和关闭
流和标准流
流
(该图片转载)
流是有明确的方向性的,所以分为两种,要么是输入流(从外部设备到内存),要么是输出流 (从内存向外部设备)。
标准流
那为什么我们从键盘输⼊数据,向屏幕上输出数据,并没有打开流,却依然能执行(如scanf,printf没有打开流却依然能执行这些操作)
文件指针
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
所以FILE类型为结构体(用了typedef将其重命名,其为结构体类型)
FILE* pf;//⽂件指针变量
文件的打开和关闭
//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );
fopen函数
FILE * fopen ( const char * filename, const char * mode );
第一个参数是文件名,第二个参数是打开方式。最终该函数会返回其文件的文件信息区的地址。
fopen第一个参数
对于该文件名,有相对路径和绝对路径。
相对路径:如第一个参数直接写"data,txt",代表着该文件与你的这个项目文件在同一个文件夹里(同一个目录里)。
当然还可以用.和..去修饰相对路径。 如”./../../data.txt“表示data.txt在该项目文件的上上个目录中。
绝对路径:
就是文件名中直接写根本的路径,根本路径我们需要在属性中看.
如图上中的文件在桌面上,其属性中的位置就是其桌面的位置,将其我们的目标文件名改为“c:\users\zhu xuan\Desktop\data.txt”就代表这是在桌面上的data.txt文件,并且由于\为转义字符,所以在代码中需要改为\\才能不影响结果。如“c:\\users\\zhu xuan\\Desktop\\data.txt”。
fopen第二个参数
有以下的打开方式:
现在浅谈一下“r”“w”“a”。
“r”:如果不存在该文本文件,则返回一个NULL指针,且系统会出错(但程序不会崩溃,依旧运行,我们可以用perror去打印出其错误)。
如果存在该文本文件,则打开该文本文件,且只能对该文件的数据进行读取使用(不能输入数据对该文件进行修改)。
”w“:如果不存在该文本文件,则建立一个新的文本文件。
如果存在该文本文件,则打开该文件且格式化该文件(将该文件内容清除),且只能对该文件的数据进行输入数据(不能读取该文件)。
”a“:如果不存在该文本文件,则建立一个新的文本文件。
如果存在该文本文件,则打开该文件(不会格式化该文件),保留原来的内容并继续追加数据输入到文件中(不能读取该文件)
其总共有12种打开方式,这里我们只讲三种(对于有r字符的打卡方式,都是不存在该文件则返回NULL,其他打开方式都是再建立一个文件)。
对于其fopen打开方式的更多细节内容,我推荐一篇文章,这里讲的更仔细。
【C 语言】文件操作 ( fopen 文件打开方式详解 )-CSDN博客
这篇文章讲了其中七种的打开方式,讲的很详细了,看懂了这七种其他的自然手到擒来。还讲了个rw+打开方式,rw+用到的很少无需关注。
fclose函数
这个就很简单了,只需要将该文件的文件信息区的地址填入到fclose括号里面,就能销毁掉该文件的文件信息区(也就是关闭文件)
总结
所以这就是我们的c语言文件读写的第一部分(这是我在一月份c语言时期写的存稿,所以书写可能没有现在美观,还请见谅)。 还希望各位大佬们能给个三连,点点关注,点点赞,发发评论呀,感谢各位大佬~❤️❤️💕💕🥳🎉🎉🎉