文件操作系列函数详解+代码展示

系列文章目录

🎈 🎈 我的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、检查返回值:

文件操作函数(如fopenfclosefreadfwrite等),
通常都有返回值,用于指示操作是否成功。
务必检查这些返回值。

2、文件指针:

文件操作依赖于文件指针(FILE *),
确保文件指针在使用前已经正确初始化,
并在使用后正确关闭。

3、缓冲区:

使用fgetsfputs等函数时,要注意缓冲区的大小,避免缓冲区溢出。

4、文件模式:

选择正确的文件模式非常重要,特别是写模式和追加模式,
它们的行为是不同的。

5、错误处理:

使用perrorstrerror等函数来处理文件操作中的错误,
提供有用的错误信息。

6、二进制文件:

对于二进制文件,使用freadfwrite进行读写,
避免使用文本模式函数(如fgetsfputs)。


END

每天都在学习的路上!
On The Way Of Learning

相关推荐
SoveTingღ3 分钟前
【C语言】数组和指针一样吗?
c语言·unix·指针·数组·嵌入式软件
向左转, 向右走ˉ18 分钟前
为什么分类任务偏爱交叉熵?MSE 为何折戟?
人工智能·深度学习·算法·机器学习·分类·数据挖掘
云边有个稻草人1 小时前
【C++】第十九节—一文万字详解 | AVL树实现
数据结构·c++·avl树·avl树的插入·avl树的旋转·avl树实现·avl树的结构
奇树谦1 小时前
Qt|槽函数耗时操作阻塞主界面问题
开发语言·qt
小羊斩肖恩1 小时前
Go性能优化深度指南:从原理到实战
开发语言·性能优化·golang
霜绛1 小时前
机器学习笔记(四)——聚类算法KNN、Kmeans、Dbscan
笔记·算法·机器学习·kmeans·聚类
晨非辰2 小时前
#C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
c语言·开发语言·数据结构·学习·算法·排序算法·visual studio
zzywxc7872 小时前
编程算法在金融、医疗、教育、制造业等领域的落地案例
人工智能·算法·金融·自动化·copilot·ai编程
zzywxc7872 小时前
编程算法在金融、医疗、教育、制造业的落地应用。
人工智能·深度学习·算法·机器学习·金融·架构·开源
conkl3 小时前
构建 P2P 网络与分布式下载系统:从底层原理到安装和功能实现
linux·运维·网络·分布式·网络协议·算法·p2p