文件操作

文件

  • 程序文件 : 包括源程序文件, 目标文件, 可执行程序
  • 数据文件 : 文件的内容不一定是程序, 而是程序运行时读写的数据

文件名

一个文件要有一个唯一的文件标识

文件路径 + 文件名主干 + 文件后缀

文件类型

根据数据的组织形式, 数据文件被称为文本文件或二进制文件

  • 数据在内存中以二进制的形式存储, 如果不加转换的输出到外存, 就是二进制文件
  • 如果要求在外存上以ASCII码的形式存储, 则需要存储前转换, 以ASCII字符的形式存储的文件就是文本文件

文件缓冲区

ANSIC标准采用"缓冲文件系统"处理数据文件, 缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块"文件缓冲区"

从内存向磁盘输送数据会先送到内存的缓冲区, 装满缓冲区后才送到磁盘上

如果从磁盘向计算机读入数据, 则从磁盘文件中读取数据输入到内存缓冲区, 然后再从缓冲区逐个地将数据送到程序数据区

文件指针

每个被使用的文件都在内存中开辟了一个相应的文件信息区, 用来存放文件的相关信息. 这些信息是保存在一个结构体变量中的. 该结构类型有系统声明的, 取名FILE

// 创建一个FILE *的指针变量
FILE *pf; 	// 文件指针变量

// 通过文件指针变量能找到与它关联的文件

文件的打开与关闭

FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
// 例
int main() {
	FILE *pFile;
	pFile = fopen("myfile.txt", "w");
	if (pFile != NULL) {
		fputs("fopen example", pFile);
		fclose(pFile);
	}
	return 0;
}

文件的随机读写

fseek

根据文件指针的位置和偏移量来定位文件指针

int fseek(FILE *stream, long int offset, int origin);

ftell

返回文件指针相对于起始位置的偏移量

long int ftell(FILE *stream);

rewind

让文件指针的位置回到文件的起始位置

void rewind(FILE *stream);

文件结束判定

在文件读取过程中, 不能使用feof函数的返回值直接判断文件是否结束

而是应用于当文件结束的时候, 判断是读取失败结束, 还是遇到文件尾结束

  1. 文本文件读取是否结束, 判断返回值是否为EOF(fgetc), 或者NULL(fgets)
  2. 二进制文件的读取结束判断, 判断返回值是否小于实际要读的个数

 


我们的征途是星辰大海!