【C语言】文件的读取和写入
在C语言中,可以使用标准库函数来进行文件的读取和写入。这些函数通常被称为文件I/O函数,其中包括打开文件、读取文件、写入文件和关闭文件等操作。
1、打开文件
要打开一个文件,需要使用标准库函数fopen。fopen函数的原型如下:
FILE *fopen(const char *filename, const char *mode);
其中,filename是要打开的文件名,mode是打开文件的模式。mode可以是以下值之一:
“r”:只读模式,从文件开头读取数据,如果文件不存在则返回NULL;
“w”:写入模式,如果文件不存在则创建文件,如果文件已经存在则清空文件中的数据;
“a”:追加模式,从文件末尾写入数据,如果文件不存在则创建文件;
“r+”:读写模式,从文件开头读取数据,并可以在文件中写入数据,如果文件不存在则返回NULL;
“w+”:读写模式,如果文件不存在则创建文件,如果文件已经存在则清空文件中的数据;
“a+”:读写模式,从文件末尾写入数据,并可以在文件中读取数据,如果文件不存在则创建文件。
fopen函数返回一个指向FILE结构体的指针。该指针用于后续的文件I/O操作。例如,以下代码打开一个名为example.txt的文件进行读取:
FILE *fp;
fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return -1;
}
2、读取文件
要从文件中读取数据,可以使用标准库函数fread。fread函数的原型如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr是一个指向要读取数据的缓冲区的指针,size是每个元素的大小,count是要读取的元素数量,stream是指向要读取的文件的指针。fread函数返回实际读取的元素数量。例如,以下代码从文件中读取10个整数:
int arr[10];
size_t num = fread(arr, sizeof(int), 10, fp);
3、写入文件
要将数据写入文件,可以使用标准库函数fwrite。fwrite函数的原型如下:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
其中,ptr是一个指向要写入数据的缓冲区的指针,size是每个元素的大小,count是要写入的元素数量,stream是指向要写入的文件的指针。fwrite函数返回实际写入的元素数量。例如,以下代码将10个整数写入文件:
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
size_t num = fwrite(arr, sizeof(int), 10, fp);
需要注意的是,在写入文件时,要确保要写入的数据的大小和数量与要写入的文件的大小和位置相匹配。否则,可能会导致数据丢失或文件损坏。
4、关闭文件
使用完文件之后,需要调用fclose函数关闭文件。fclose函数的原型如下:
int fclose(FILE *stream);
其中,stream是指向要关闭的文件的指针。fclose函数返回0表示成功关闭文件,返回EOF表示关闭文件失败。例如,以下代码关闭文件:
int ret = fclose(fp);
if (ret != 0) {
printf("Failed to close file\n");
return -1;
}
需要注意的是,在进行文件I/O操作之前,应该检查函数的返回值,以确保操作成功。如果操作失败,需要根据具体情况进行错误处理。