
系列文章目录
🎈 🎈 我的CSDN主页 :OTWOL的主页,欢迎!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集 :C语言初阶合集,希望能帮到你!!!😍 😍
🔍🔍我的C语言进阶合集 :我的C语言进阶合集,期待你的点击!!!🌈🌈
文章目录
前言
各位博友,大家好!👋 今天我为大家总结C语言中的文件操作📁。
文件操作是编程中的重要部分,它允许我们读写存储在磁盘上的数据。
我将详细介绍文件打开、读写、关闭等基本操作,
以及一些注意事项,助你轻松掌握文件处理技巧!📝
一、 文件打开
在C语言中,文件操作是通过标准库函数来实现的。
首先,我们需要包含头文件<stdio.h>
。
- 函数原型
bash
FILE *fopen(const char *filename, const char *mode);
filename
:要打开的文件名(包括路径)。
mode
:打开文件的模式,如读、写、追加等。
- 常见的模式
模式(mode) | 含义 |
---|---|
r | 只读模式,文件必须存在。 |
w | 只写模式,文件不存在则创建,存在则清空。 |
a | 追加模式,文件不存在则创建,存在则在文件末尾追加数据。 |
r+ | 读写模式,文件必须存在。 |
w+ | 读写模式,文件不存在则创建,存在则清空。 |
a+ | 读写模式,文件不存在则创建,存在则在文件末尾追加数据,但可以读取文件。 |
- 示例:
c
#include <stdio.h>
int main()
{
// 尝试以写入模式打开名为 "test.txt" 的文件
FILE* pf = fopen("test.txt", "w");
// 如果文件打开失败,pf 将等于 NULL
if (pf == NULL)
{
// 使用 perror 打印错误信息,"fopen"是错误信息的前缀
perror("fopen");
// 返回 非零值表示程序异常退出
return 1;
}
// 关闭文件,释放资源
fclose(pf);
// 将 pf 设置为 NULL,避免野指针问题
pf = NULL;
// 返回 0 表示程序正常退出
return 0;
}
二、 文件关闭
- 函数原型
bash
int fclose(FILE *stream);
fclose
:关闭文件,释放资源。
- 示例:
c
#include <stdio.h>
int main()
{
// 尝试以读取模式打开名为"test.txt"的文件
FILE* pf = fopen("test.txt", "r");
// 如果文件打开失败, pf 将等于 NULL
if (pf == NULL)
{
// 使用 perror 打印错误信息, "fopen" 是错误信息的前缀
perror("fopen");
// 返回非零值表示程序异常退出
return 1;
}
// 关闭文件,释放资源
fclose(pf);
// 将 pf 设置为 NULL,避免野指针问题
pf = NULL;
// 返回 0 表示程序正常退出
return 0;
}
三、文件读写
写文件
- 函数原型
c
int fputc(int c, FILE* stream);
int fputs(const char* str, FILE* stream);
int fprintf(FILE* stream, const char* format, ...);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
fputc
:写入单个字符。
fputs
:写入字符串。
fprintf
:格式化写入,类似于printf
。
fwrite
:写入二进制数据。
- 示例:
c
#include <stdio.h>
int main()
{
// 尝试以写入模式打开名为"test.txt"的文件
FILE* pf = fopen("test.txt", "w");
// 如果文件打开失败,pf 将等于 NULL
if (pf == NULL)
{
// 使用 perror 打印错误信息,"fopen"是错误信息的前缀
perror("fopen");
// 返回非零值表示程序异常退出
return 1;
}
// 使用 fputs 函数将字符串"Hello, World!\n"写入文件
fputs("Hello, World!\n", pf);
// 使用 fprintf 函数将格式化的字符串和数字 66 写入文件
fprintf(pf, "Number: %d\n", 66);
// 关闭文件,释放资源
fclose(pf);
// 将 pf 设置为 NULL,避免野指针问题
pf = NULL;
// 返回 0 表示程序正常退出
return 0;
}
读文件
- 函数原型
c
int fgetc(FILE* stream);
char* fgets(char* str, int n, FILE* stream);
int fscanf(FILE* stream, const char* format, ...);
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
fgetc
:读取单个字符。
fgets
:读取字符串。
fscanf
:格式化读取,类似于scanf
。
fread
:读取二进制数据。
- 示例:
c
#include <stdio.h>
int main()
{
char buf[20]; // 定义一个字符数组,用于存储从文件中读取的每一行
int n; // 定义一个整数变量,用于存储从文件中读取的整数
FILE* pf = fopen("test.txt", "r"); // 尝试以读取模式打开名为"test.txt"的文件
if (pf == NULL) // 如果文件打开失败, pf 将等于 NULL
{
perror("fopen"); // 使用 perror 打印错误信息,"fopen"是错误信息的前缀
return 1; // 返回非零值表示程序异常退出
}
// 使用 fgets 循环读取文件的每一行,直到到达文件末尾
while (fgets(buf, sizeof(buf), pf) != NULL)
{
printf("%s", buf); // 打印读取的每一行
}
rewind(pf); // 将文件指针重新定位到文件开头,以便重新读取文件
fscanf(pf, "n: %d", &n); // 从文件中读取格式化的整数,假设格式为 "n: 数字"
printf("n: %d\n", n); // 打印读取的整数
fclose(pf); // 关闭文件,释放资源
pf = NULL; // 将 pf 设置为 NULL,避免野指针问题
return 0; // 返回 0 表示程序正常退出
}
四、注意事项
1、检查返回值:
文件操作函数(如
fopen
、fclose
、fread
、fwrite
等),
通常都有返回值,用于指示操作是否成功。
务必检查这些返回值。
2、文件指针:
文件操作依赖于文件指针(
FILE *
),
确保文件指针在使用前已经正确初始化,
并在使用后正确关闭。
3、缓冲区:
使用
fgets
和fputs
等函数时,要注意缓冲区的大小,避免缓冲区溢出。
4、文件模式:
选择正确的文件模式非常重要,特别是写模式和追加模式,
它们的行为是不同的。
5、错误处理:
使用
perror
或strerror
等函数来处理文件操作中的错误,
提供有用的错误信息。
6、二进制文件:
对于二进制文件,使用
fread
和fwrite
进行读写,
避免使用文本模式函数(如fgets
和fputs
)。
END
每天都在学习的路上!
On The Way Of Learning