在C语言中,文件操作是很重要的一部分内容,它允许程序与外部文件进行交互,实现数据的持久化存储和读取。
1.文件指针
文件指针是一个指向 FILE 类型结构体的指针,用于标识一个文件。在使用文件之前,需要定义一个文件指针变量,例如:
FILE *fp;
2.打开/关闭文件
使用 fopen 函数来打开一个文件,该函数的原型如下:
FILE *fopen(const char *filename, const char *mode);
filename:要打开的文件的名称,可以包含路径。
mode:打开文件的模式,常见的模式有:
“r”:以只读模式打开文本文件,文件必须存在。
“w”:以写入模式打开文本文件,如果文件不存在则创建,如果文件已存在则清空内容。
“a”:以追加模式打开文本文件,如果文件不存在则创建,写入的数据会追加到文件末尾。
“rb”、”wb”、”ab”:分别对应二进制文件的只读、写入、追加模式。
使用 fclose 函数关闭文件,函数原型如下:
int fclose(FILE *stream);
关闭文件可以释放系统资源,确保数据被正确写入文件。
打开并关闭文件的代码如下:
FILE *fp = fopen(“test.txt”, “r”);
if (fp == NULL) {
perror(“文件打开失败”);
return 1;
}
//此处省略文件操作的代码
fclose(fp);
3.写入文件
(1)fputc 函数
用于向文件中写入一个字符,函数原型如下:
int fputc(int c, FILE *stream);
(2)fputs 函数
用于向文件中写入一个字符串,函数原型如下:
int fputs(const char *s, FILE *stream);
(3)fprintf 函数
类似于 printf 函数,用于格式化输出到文件,函数原型如下:
int fprintf(FILE *stream, const char *format,…);
4.读取文件
(1)fgetc 函数
从文件中读取一个字符,函数原型如下:
int fgetc(FILE *stream);
(2)fgets 函数
从文件中读取一行字符串,函数原型如下:
char *fgets(char *s, int size, FILE *stream);
(3)fscanf 函数
类似于 scanf 函数,用于从文件中格式化读取数据,函数原型如下:
int fscanf(FILE *stream, const char *format,…);
5.文件重定向
文件重定向技术允许用户改变程序输入输出的默认方向,将原本要输出到标准输出设备(通常是屏幕)的数据输出到文件中,或者从文件中读取数据而不是从标准输入设备(通常是键盘)获取输入。
在操作系统中,每个进程都有三个标准的输入输出流:标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)。默认情况下,stdin 对应键盘输入,stdout 和 stderr 对应屏幕输出。文件重定向就是改变这些流的目标,让输入来自文件,或者让输出写入文件。
在C语言程序中,也可以使用 freopen 函数来实现文件重定向。freopen 函数的原型如下:
FILE *freopen(const char *filename, const char *mode, FILE *stream);
filename:要重定向的文件的名称。
mode:打开文件的模式,如 “r”(只读)、”w”(写入)等。
stream:要重定向的流,可以是 stdin、stdout 或 stderr。
例如:
int main()
{
// 将标准输出重定向到文件 output.txt
freopen(“output.txt”, “w”, stdout)
// 将标准输入重定向到文件 input.txt
freopen(“input.txt”, “r”, stdin) == NULL)
int num;
scanf("%d", &num);
printf("Read number from file: %d\n", num);
return 0;
}
在这个示例中,首先将标准输出重定向到output.txt 文件,然后将标准输入重定向到input.txt文件。