1.为什么会有文件操作?
程序在运行时,将数据写到内存中,但是当行程序退出的时候,内存中的数据也会伴随着消失,所以如果想要持久化的保存数据,就需要文件操作。
2.什么是文件
硬盘(磁盘)上的文件就是我们所说的文件。按照功能分:数据文件,程序文件。
2.1程序文件
包括源文件(.c文件),目标文件(.obj文件),可执行程序(.exc文件)。Windows操作系统为例
2.2数据文件
文件的内容不一定是程序,而是程序运行时需要读写的数据,比如程序运行时需要从中读取内容的文件,或者输出内容的文件。
本章讨论的是数据文件,在此之前,我们的输入输出操作都是在标准的输入(键盘)输出(终端)上进行的。
其实我们有的时候需要把内容输入到磁盘上,或者从磁盘上读取数据,这里的对象就是处理的磁盘上的文件。
2.3文件名
一个文件需要一个唯一的文件标识,这个标识就是文件名,它包括:文件路径+文件名主干+文件后缀。
D:\编程\Code\Visual Studio\mine_sweeping_24_10_25
需要注意的是这里的文件并没有文件后缀,也就是说文件后缀并不是必须的。
另外,为了方便起见,文件标识通常被称为文件名。
3.二进制文件和文本文件
根据文件的组织形式,文件被分为二进制文件和文本文件。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中就是二进制文件。
如果以ASCII码的形式存储,则需要转化之后输出到文件中。以ASCII码的形式输出的文件就是文本文件。
补充一点:字符都是以ASCII码的形式存储,但是整形有两种存储形式,以1000为例
二进制形式:
ASCII码形式:
# include <stdio.h>int main (){int a = 10000 ;FILE* pf = fopen( "test.txt" , "wb" );fwrite(&a, 4 , 1 , pf); // ⼆进制的形式写到⽂件中fclose(pf);pf = NULL ;return 0 ;}![]()
4.文件的打开和关闭
4.1流和标准流
4.1.1流
4.1.2标准流
(2)stdout - 标准输出流,在大多数环境中是输出是显示器界面(终端界面),printf就是将标准输出流中内容输出到终端。
stdin、stdout、stderr 三个流的类型是: FILE * ,通常称为文件指针。
4.2文件指针

struct _ iobuf {char *_ptr;int _cnt;char *_base;int _flag;int _file;int _charbuf;int _bufsiz;char *_tmpfname;};typedef struct _ iobuf FILE ;(VS2013)

4.3文件的打开与关闭


5.文件的顺序读写






fscanf int fscanf ( FILE * stream, const char * format, ... );
fprintf
int fprintf ( FILE * stream, const char * format, ... );
以二进制的形式输入输出:
fwrite:
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
fread:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
6.文件的随机读写
fseek: 根据文件指针的位置和偏移量来定位文件指针(⽂件内容的光标)int fseek ( FILE * stream, long int offset, int origin );![]()
ftell: 返回文件指针相对于起始位置的偏移量long int ftell ( FILE * stream );![]()
rewind: 让文件指针的位置回到文件的起始位置void rewind ( FILE * stream );