【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )

简介: 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )

文章目录

一、函数形参设置

二、确保打开文件成功

三、统计文件大小





一、函数形参设置


函数形参设置 :


该函数的作用是 写出或更新配置项 , 遍历每行数据 , 检查 key 键 是否存在 ,


如果存在 , 就更新对应的 value 值 ;

如果不存在 , 在文件末尾添加该键值对信息 ;


传入 配置文件 名称 , 键值对 字符串 数据 即可 ;


下面的函数形参中的 int value_len /*in*/ 不是必须的 ;



代码示例 :


/**
 * @brief write_or_update_config_file 写出或更新配置项
 * 遍历每行数据 , 检查 key 键 是否存在
 * 如果存在 , 就更新对应的 value 值
 * 如果不存在 , 在文件末尾添加该键值对信息
 * 格式为 :
 * key = value
 *
 * @param filename 文件名称
 * @param key 键
 * @param value 值
 * @param value_len 值的长度
 * @return
 */
int write_or_update_config_file(char *filename /*in*/, char *key /*in*/, char * value/*in*/, int value_len /*in*/)






二、确保打开文件成功


确保打开文件成功 : 这里确保文件打开 100 % 100\%100% 成功 , 因为文件可能不存在 , 如果文件不存在 , 则需要创建该文件 ;



首先 , 先尝试打开文件 , 如果打开失败 , 提示错误 ;


 

// 使用读写方式打开 filename 文件
    fp = fopen(filename, "r+");
    // 如果打开失败 提示失败信息
    if (fp == NULL)
    {
        ret = -2;
        printf("error : fopen \n");
    }


然后 , 使用 "w+t" 打开方式 , 打开文件 , 如果文件不存在 , 则会创建文件 , 如果本次再次打开文件失败 , 则直接退出 ;


 

// 如果文件打开失败 , 说明没有文件
    if (fp == NULL)
    {
        // 以写的方式 , 打开文本文件 , 如果文件不存在 , 则创建文件
        fp = fopen(filename, "w+t");
        // 打开失败 , 直接退出
        if (fp == NULL)
        {
            ret = -3;
            printf("error : fopen \n");
            goto End;
        }
    }


代码示例 :


 

// 使用读写方式打开 filename 文件
    fp = fopen(filename, "r+");
    // 如果打开失败 提示失败信息
    if (fp == NULL)
    {
        ret = -2;
        printf("error : fopen \n");
    }
    // 如果文件打开失败 , 说明没有文件
    if (fp == NULL)
    {
        // 以写的方式 , 打开文本文件 , 如果文件不存在 , 则创建文件
        fp = fopen(filename, "w+t");
        // 打开失败 , 直接退出
        if (fp == NULL)
        {
            ret = -3;
            printf("error : fopen \n");
            goto End;
        }
    }






三、统计文件大小


统计文件大小 :


首先 , 调用 fseek 函数 , 将文件指针移动到末尾 ;

 

// 将文件指针移动到末尾
    fseek(fp, 0L, SEEK_END);


然后 , 调用 ftell 函数 获取当前指针位置 , 当前指针位置就是文件大小 ;

// 获取当前指针位置 , 当前指针位置就是文件大小
    file_length = ftell(fp);


最后 , 调用 fseek 函数 , 将文件指针指向开始位置 ; 以便后续文件操作 , 不需要重新打开文件 ;

   // 将文件指针指向开始位置

// 将文件指针指向开始位置
    fseek(fp, 0L, SEEK_SET);



代码示例 :


// 统计文件大小
    // 将文件指针移动到末尾
    fseek(fp, 0L, SEEK_END);
    // 获取当前指针位置 , 当前指针位置就是文件大小
    file_length = ftell(fp);
    // 将文件指针指向开始位置
    fseek(fp, 0L, SEEK_SET);
    // 文件大小不能超过 4K
    if (file_length > 1024 * 4)
    {
        ret = -3;
        printf("File Size More Than 4K\n");
        goto End;
    }


目录
相关文章
|
2月前
|
存储 程序员 C语言
c语言文件操作
本文介绍了C语言中文件操作的核心概念,包括文件缓冲区、数据与程序文件的区别、流的概念及标准输入输出流。重点讲解了文件的打开与关闭、读写操作(如fgetc、fputs、fscanf、fwrite等),以及随机读写函数fseek、ftell和rewind的使用方法。同时说明了文本文件与二进制文件的读取结束判定方式,并通过代码示例展示了实际应用。
|
3月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
985 0
|
5月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
317 15
|
6月前
|
存储 编译器 程序员
c语言的文件操作与文件缓冲区
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。磁盘(硬盘)上的文件是文件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序文件、数据文件(从文件功能的角度来分类 的)。就比如说我们电脑中以.txt为后缀的就是文件的一种,他就是数据文件。.exe为后缀的就为程序文件。函数名功能适用范围fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets。
146 0
|
10月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
376 1
一文彻底搞清楚C语言的函数
|
11月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
562 16
|
11月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
230 13
|
11月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
441 3
|
11月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
353 2
|
11月前
|
存储 小程序 C语言
【C语言程序设计——文件】文件操作(头歌实践教学平台习题)【合集】
本文介绍了C语言中的文件操作,分为两个关卡。第1关任务是将键盘输入的字符(以#结束)存入`file1.txt`并显示输出;第2关任务是从键盘输入若干行文本(每行不超过80个字符,用-1作为结束标志),写入`file2.txt`后再读取并显示。文中详细讲解了文件的打开、读取(使用`fgetc()`和`fgets()`)、写入(使用`fputc()`和`fputs()`)及关闭操作,并提供了示例代码和测试说明。
290 5