文件读写是 C 语言中常见的操作,用于将数据存储到文件中或从文件中读取数据。C 语言通过标准库提供的文件操作函数实现这些功能,文件的操作包括打开文件、读写数据、关闭文件等。
📌 目录
1. 文件操作概述
在 C 语言中,文件操作主要通过 stdio.h
头文件提供的函数进行。文件读写操作分为以下几个基本步骤:
- 打开文件:使用
fopen()
打开文件。 - 读写文件:使用如
fscanf()
、fprintf()
、fread()
、fwrite()
等函数进行文件操作。 - 关闭文件:使用
fclose()
关闭文件。
文件操作允许程序持久化存储数据,方便数据的传输和后续处理。
2. 文件的打开与关闭
打开文件:fopen()
fopen()
函数用于打开一个文件,返回一个文件指针。如果打开失败,返回 NULL
。
语法:
FILE *fopen(const char *filename, const char *mode);
filename
:要打开的文件名。mode
:文件打开模式,决定文件的访问方式。
关闭文件:fclose()
文件操作完成后,应使用 fclose()
关闭文件,以释放资源。
语法:
int fclose(FILE *stream);
stream
:文件指针,指向打开的文件。
示例:打开并关闭文件
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w"); // 以写模式打开文件
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(file, "Hello, World!\n"); // 写入数据到文件
fclose(file); // 关闭文件
printf("File written and closed successfully.\n");
return 0;
}
输出:
File written and closed successfully.
3. 文件写入操作
C 语言提供了多种方式来向文件中写入数据,最常见的方式是使用 fprintf()
和 fwrite()
。
fprintf()
fprintf()
用于将格式化的数据写入文件,类似于 printf
。
语法:
int fprintf(FILE *stream, const char *format, ...);
fwrite()
fwrite()
用于将二进制数据写入文件。
语法:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
ptr
:指向要写入的数据的指针。size
:每个元素的大小(字节数)。count
:要写入的元素个数。stream
:文件指针。
示例:写入文本与二进制数据
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
// 写入文本数据
fprintf(file, "This is a sample text.\n");
// 写入二进制数据
int arr[] = {1, 2, 3, 4, 5};
fwrite(arr, sizeof(int), 5, file);
fclose(file);
printf("Data written to file.\n");
return 0;
}
输出:
Data written to file.
4. 文件读取操作
C 语言通过 fscanf()
和 fread()
函数读取文件内容。
fscanf()
fscanf()
用于从文件中读取格式化的数据,类似于 scanf
。
语法:
int fscanf(FILE *stream, const char *format, ...);
fread()
fread()
用于读取二进制数据。
语法:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
ptr
:指向存储读取数据的缓冲区。size
:每个元素的大小(字节数)。count
:要读取的元素个数。stream
:文件指针。
示例:读取文本与二进制数据
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
// 读取文本数据
char text[100];
fscanf(file, "%s", text);
printf("Read text: %s\n", text);
// 读取二进制数据
int arr[5];
fread(arr, sizeof(int), 5, file);
printf("Read binary data: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
fclose(file);
return 0;
}
输出:
Read text: This
Read binary data: 1 2 3 4 5
5. 文件指针与定位
文件指针用于指示当前文件的位置。C 语言提供了几个函数来控制文件指针的位置:
fseek()
:设置文件指针到指定位置。ftell()
:返回文件指针的当前位置。rewind()
:将文件指针移动到文件的开始位置。
示例:文件指针操作
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
// 移动文件指针到文件的第5个字节
fseek(file, 5, SEEK_SET);
// 获取文件指针位置
long position = ftell(file);
printf("Current file pointer position: %ld\n", position);
fclose(file);
return 0;
}
输出:
Current file pointer position: 5
6. 文件模式
在打开文件时,fopen()
需要指定文件的打开模式,常见的模式包括:
"r"
:以只读方式打开文件。"w"
:以只写方式打开文件。如果文件不存在,则创建文件;如果文件已存在,清空文件内容。"a"
:以追加方式打开文件。如果文件不存在,则创建文件;如果文件已存在,内容会追加到文件末尾。"rb"
、"wb"
、"ab"
:二进制模式下的文件打开方式。
7. 错误处理与文件操作
C 语言提供了几个函数用于处理文件操作中的错误:
ferror()
:检查文件流是否发生错误。perror()
:打印与错误相关的描述信息。
示例:错误处理
#include <stdio.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fclose(file);
return 0;
}
输出:
Error opening file: No such file or directory
8. 文件读写的常见示例
示例:写入并读取文本文件
#include <stdio.h>
int main() {
FILE *file = fopen("data.txt", "w");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
fprintf(file, "This is a simple file operation example.\n");
fclose(file);
file = fopen("data.txt", "r");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
char buffer[100];
fgets(buffer, 100, file);
printf(“Read from file: %s\n”, buffer);
fclose(file);
return 0;
}
**输出:**
Read from file: This is a simple file operation example.
---
## **9. 参考资料**
- [C 文件 I/O 操作 - 菜鸟教程](https://www.runoob.com/cprogramming/c-file-io.html)
- [C 语言文件操作 - GeeksforGeeks](https://www.geeksforgeeks.org/file-handling-c-classes/)
- [C 语言文件操作 - Wikipedia](https://en.wikipedia.org/wiki/C_standard_library#File_operations)
---
## **📌 总结**
C 语言通过 `fopen`、`fclose`、`fprintf`、`fscanf`、`fwrite`、`fread` 等函数实现了对文件的读写操作。程序可以使用这些函数进行文本文件和二进制文件的处理。理解文件模式、文件指针及其定位、以及错误处理是进行文件操作时的重要基础。
发表回复