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

系列文章目录

🎈 🎈 我的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

相关推荐
wjs20248 分钟前
DOM CDATA
开发语言
Tingjct9 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
C雨后彩虹10 分钟前
计算疫情扩散时间
java·数据结构·算法·华为·面试
猷咪35 分钟前
C++基础
开发语言·c++
IT·小灰灰37 分钟前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧38 分钟前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q39 分钟前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳039 分钟前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾39 分钟前
php 对接deepseek
android·开发语言·php
CSDN_RTKLIB42 分钟前
WideCharToMultiByte与T2A
c++