在C语言中,读写文件是一个重要的操作,通过读写文件,我们可以将数据存储到磁盘上,以便在程序运行过程中或程序结束后进行访问,我们还可以读取文件中的数据,对其进行处理和分析,本文将详细介绍如何在C语言中进行文件的读写操作。
1、文件:文件是计算机中存储数据的载体,可以是文本文件、二进制文件等,在C语言中,文件是以流的形式进行操作的。
2、文件指针:文件指针是一个变量,用于存放指向文件的地址,通过文件指针,我们可以对文件进行各种操作。
3、文件类型指针:文件类型指针是一个特殊的指针,用于指向文件类型的数据结构,通过文件类型指针,我们可以更方便地对文件进行操作。
在进行文件读写操作之前,我们需要先打开一个文件,打开文件的过程称为“创建文件流”,关闭文件的过程称为“关闭文件流”。
1、打开文件:在C语言中,我们使用fopen函数来打开一个文件,fopen函数的原型如下:
FILE *fopen(const char *filename, const char *mode);
filename表示要打开的文件名,mode表示打开文件的模式,常见的模式有以下几种:
"r": 以只读方式打开文件,如果文件不存在则创建一个新文件。
"w": 以写入方式打开文件,如果文件不存在则创建一个新文件,如果文件存在则清空原内容。
"a": 以追加方式打开文件,如果文件不存在则创建一个新文件,如果文件存在则在原内容后追加新内容。
"r+": 以读写方式打开文件,如果文件不存在则创建一个新文件。
"w+": 以读写方式打开文件,如果文件不存在则创建一个新文件,如果文件存在则清空原内容。
"a+": 以读写方式打开文件,如果文件不存在则创建一个新文件,如果文件存在则在原内容后追加新内容。
2、关闭文件:在完成对文件的操作后,我们需要关闭文件,关闭文件的过程可以使用fclose函数来实现,fclose函数的原型如下:
int fclose(FILE *stream);
stream表示要关闭的文件流,fclose函数会释放与该流相关的资源,并返回一个整数值表示操作结果,如果操作成功,返回0;否则返回非0值。
在打开文件之后,我们就可以进行读写操作了,在C语言中,我们使用fgetc、fputc、fread、fwrite等函数来进行读写操作。
1、字符读写:使用fgetc函数从文件中读取一个字符,使用fputc函数向文件中写入一个字符,这两个函数的原型如下:
int fgetc(FILE *stream);int fputc(int c, FILE *stream);
stream表示要操作的文件流,c表示要写入的字符,fgetc函数会返回从文件中读取到的字符,如果到达文件末尾则返回EOF(End Of File),fputc函数会将字符c写入到文件中,并返回写入的字符,如果写入失败则返回EOF。
2、字符串读写:使用fgets函数从文件中读取一行字符串,使用fputs函数向文件中写入一行字符串,这两个函数的原型如下:
char *fgets(char *str, int n, FILE *stream);int fputs(const char *str, FILE *stream);
str表示要存储读取到的字符串的缓冲区,n表示缓冲区的大小,stream表示要操作的文件流,fgets函数会返回读取到的字符串的第一个字符的地址,如果到达文件末尾则返回NULL,fputs函数会将字符串str写入到文件中,并返回写入的字符数,如果写入失败则返回EOF。
3、数据块读写:使用fread函数从文件中读取一块数据,使用fwrite函数向文件中写入一块数据,这两个函数的原型如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
ptr表示要存储读取到的数据的缓冲区的首地址,size表示每个数据的大小,count表示要读取或写入的数据块的数量,stream表示要操作的文件流,fread函数会返回实际读取到的数据块的数量,如果到达文件末尾则返回0,fwrite函数会返回实际写入的数据块的数量,如果写入失败则返回0。
下面通过一个简单的实例来演示如何在C语言中进行文件的读写操作,在这个实例中,我们将从一个文本文件中读取内容,并将其中的大写字母转换为小写字母后输出到另一个文本文件中。
#include <stdio.h>#include <ctype.h>#include <stdlib.h>#include <string.h>int main() { FILE *input_file, *output_file; char input_buffer[1024], output_buffer[1024]; char oldPath[] = "input.txt"; // 输入文件路径 char newPath[] = "output.txt"; // 输出文件路径 int read_count; size_t write_count; int i; char ch; input_file = fopen(oldPath, "r"); // 打开输入文件 if (input_file == NULL) { // 如果打开失败,输出错误信息并退出程序 printf("Error: Unable to open input file!"); exit(1); } else { // 如果打开成功,输出提示信息并继续执行后续操作 printf("Successfully opened input file!"); }