1.文件的基本概念和文件操作
文件:“文件”指存储在外部介质上数据的集合,这个数据集有一个名称,叫做文件名。
文件的分类:
1)从用户的角度看,文件可分为普通文件和设备文件两种。
2)从文件的编码方式来看,文件可分为ASCII码文件和二进制文件两种。
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。
二进制文件是按二进制的编码方式来存放文件的。
文件操作的步骤
1)引入头文件(stdio.h)
2)定义文件指针
FILE *fp = NULL;
3)打开文件
fopen(文件名,操作方式); // 如果打开成功,返回文件的首地址,如果打开失败,返回NULL
4)文件读写
对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:
字符读写函数:fgetc和fputc
字符串读写函数:fgers和fputs
数据块读写函数:fread和fwrite
格式化读写函数:fscanf和fprintf
5)关闭文件
fclose(文件指针);
文件操作的原理
1)文件缓冲区:
ANSIC标准采用“缓冲文件系统”出来数据文件,所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。
从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘区。
如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。
2)输入输出流
输入输出是数据传送的过程,数据像流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即数据流。流表示了信息从源到目的端的流动。
C语言文件指针:
在C语言中用一个指针变量指向一个文件,这个指针变量称为文件指针。
定义说明文件指针的一般形式为:
FILE *指针变量标识符; // 注意FILE应为大写
例如:FILE *fp; // 表示fp是指向FILE结构的指针变量
文件使用方式
r 打开一个已存在的文件,准备从文件中读取数据。不能向文件写数据
w 创建一个新文件,准备向文件写入数据。不能从文件中读取数据。如果文件已经存在,这个文件将被覆盖(先删后建)
a 打开一个已存在的文件,准备在文件尾部追加数据。不能从文件中读取数据。如果文件不存在,则创建这个文件准备写入数据
r+ 打开一个已存在的文件,准备读写。既可以读取数据,也可以写入数据
w+ 创建一个新文件,准备读写。如果文件已经存在,则覆盖原文件
a+ 等价于a,但可以从文件中读数据
t 打开一个文本文件
b 打开一个二进制文件
文件基本操作示例:
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义文件指针
FILE *fp = NULL; // FILE 结构体类型的指针
// 打开文件
fp = fopen("a.txt", "r"); // r是操作方式,会到Products文件夹查找a.txt文件
// fopen成功,返回文件的首地址,
// fopen失败,返回NULL
// 一般我们会做一个判断,当文件打开成功,我们再读写文件
if (fp != NULL) {
// 操作文件
printf("文件打开成功!");
} else {
//给用户一个提示
printf("文件打开失败!按任意键退出。\n");
//按任意键退出
getchar(); // 要求从键盘接收一个字符
//退出
exit(1); // 非正常退出
}
return 0;
}
2.字符的读写函数fputc和fgetc
fputc() 写入一个字符到文件中
fgetc() 读取一个字符到变量中
fputc()的使用:把'x'写入到fputc.txt中
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 1.定义文件指针
FILE *fp = NULL;
// 2.以w方式打开fputc.txt
fp = fopen("fputc.txt", "w");
// 3.判断是否打开成功
if (fp != NULL) {