C 语言中的文件操作:数据持久化的关键桥梁

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
文件存储 NAS,50GB 3个月
简介: C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。

在C语言构建的编程世界里,文件操作扮演着不可或缺的角色,它宛如一座稳固且灵活的桥梁,横跨在程序运行时的临时数据空间与外部存储设备之间,实现数据的持久化保存与高效读取,让程序突破单次运行的短暂局限,无论是处理海量数据日志、配置信息管理,还是复杂业务数据的交互流转,精通文件操作都是解锁C语言强大应用能力的关键环节。

一、文件指针与打开关闭操作:搭建交互“入口”

要开启与文件的交互之旅,首先得借助文件指针这把“钥匙”。在C语言中,通过FILE类型的指针来关联程序与外部文件,犹如在两者间牵起一条无形“纽带”。使用fopen函数便能获取这个关键指针,其原型为FILE *fopen(const char *filename, const char *mode);,第一个参数指定文件名(可包含路径,依操作系统规则而定),第二个参数则表明打开文件的模式,诸如"r"代表只读方式打开,用于读取已有文件内容,若文件不存在则报错;"w"是以写入方式打开,若文件不存在会创建新文件,存在则清空原有内容;"a"是追加模式,在文件末尾续写数据,不影响已有内容。示例如下:

#include <stdio.h>

int main() {
   
    FILE *fp;
    fp = fopen("test.txt", "w");
    if (fp == NULL) {
   
        printf("文件打开失败!\n");
        return 1;
    }
    // 后续操作,此处可写入数据到文件
    fclose(fp);  // 操作完毕关闭文件,释放资源
    return 0;
}

这段代码尝试以写入模式打开test.txt文件,若成功,fp指向该文件相关控制结构,供后续读写操作调用,最后务必用fclose函数关闭文件,就像关闭沟通程序与文件的“阀门”,确保数据完整写入磁盘、释放系统资源,避免文件损坏与资源泄露,其重要性不言而喻。

二、文件写入操作:数据“沉淀”之道

手握文件指针,写入数据便有章可循。fputc函数是写入单个字符的“能手”,原型为int fputc(int c, FILE *fp);,将字符c输出到fp指向的文件中,成功返回写入字符,失败返回EOF(文件结束标志,值为 -1)。若要批量写入字符串,fputs函数则更便捷,int fputs(const char *s, FILE *fp);把字符串s(不含字符串结束符'\0')写入文件,示例如下:

#include <stdio.h>

int main() {
   
    FILE *fp;
    fp = fopen("output.txt", "w");
    if (fp == NULL) {
   
        printf("文件打开失败!\n");
        return 1;
    }
    char str[] = "Hello, World!";
    for (int i = 0; str[i]!= '\0'; i++) {
   
        fputc(str[i], fp);
    }
    fputs("\nThis is a new line.", fp);
    fclose(fp);
    return 0;
}

上述代码先逐个字符写入"Hello, World!",再用fputs追加新行及后续字符串,展示两种写入方式协同运用,灵活实现多样化文本数据沉淀。对于结构化数据,像数组、结构体等,可结合格式化输出函数fprintf,类似printf用法,按指定格式将数据写入文件,适配复杂数据持久保存需求。

三、文件读取操作:数据“唤醒”之法

与写入相对,读取文件是将存储数据“召回”程序内存空间。fgetc函数可从文件逐字符读取,int fgetc(FILE *fp);每次返回文件当前位置下一个字符(以int型返回便于检测EOF),不断调用直至遇EOF表示文件读完。例如读取刚才写入的output.txt文件内容:

#include <stdio.h>

int main() {
   
    FILE *fp;
    fp = fopen("output.txt", "r");
    if (fp == NULL) {
   
        printf("文件打开失败!\n");
        return 1;
    }
    int ch;
    while ((ch = fgetc(fp))!= EOF) {
   
        putchar(ch);
    }
    fclose(fp);
    return 0;
}

此代码循环读取并输出字符,还原文件文本。若要按行读取整段文字,fgets函数char *fgets(char *s, int n, FILE *fp);大显身手,它读取文件至多n - 1个字符到字符数组s中(会添加'\0'),遇换行符或文件结束提前终止,有效提取文本行,契合处理日志文件、配置文件按行解析场景。

四、随机文件访问:突破顺序局限

多数情况下,文件读写按顺序进行,但某些场景需灵活定位读写位置,C语言提供fseekftell等函数实现随机访问。fseek函数int fseek(FILE *fp, long offset, int whence);可依基准点(whence可为SEEK_SET文件开头、SEEK_CUR当前位置、SEEK_END文件末尾)偏移offset字节调整读写指针位置。ftell函数long ftell(FILE *fp);则返回当前读写指针相对文件开头的偏移字节数,便于记录与回溯。假设要修改文件中间某数据块,可先ftell定位起始处,fseek跳转到目标位置读写,突破顺序枷锁,精准操控文件各角落数据,拓展文件操作功能边界,应对复杂业务逻辑。

C语言文件操作凭借多样函数与精细机制,在数据持久保存、交互共享层面撑起稳固架构,从基础指针关联、顺序读写,到随机灵活访问,搭建程序与外部文件高效沟通“桥梁”,赋能程序跨越单次运行“藩篱”,深度挖掘数据持久化价值,于系统开发、数据管理多领域筑牢根基。

相关文章
|
3天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
20天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
24天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
15天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
11531 10
|
9天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
3957 13
|
15天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
6608 10
|
27天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
13天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
2天前
|
机器学习/深度学习 人工智能 安全
通义千问开源的QwQ模型,一个会思考的AI,百炼邀您第一时间体验
Qwen团队推出新成员QwQ-32B-Preview,专注于增强AI推理能力。通过深入探索和试验,该模型在数学和编程领域展现了卓越的理解力,但仍在学习和完善中。目前,QwQ-32B-Preview已上线阿里云百炼平台,提供免费体验。
|
9天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
685 4