从短暂的记忆到永恒的回忆——文件相关操作

一、为什么与是什么

写程序的时候,如果数据只是储存在内存中,一旦退出程序数据就被删除,每次打开又要重新录入数据,无法做到永久保存

于是聪明的人类发明了磁盘以及数据库用于存放数据。而我们常把磁盘中的文件就简称为文件

二、分类

(按照功能的角度)

分为程序文件数据文件

【程序文件】

源程序文件(.c)

目标文件(.obj)

可执行文件(.exe)

(后缀为Windows环境下)

【数据文件】

程序运行时用于读写数据

当我们把信息输入到磁盘上,在把磁盘上读取到的信息用于程序中就是在处理磁盘上的文件

数据文件又分为文本文件二进制文件

文本文件:ASCII码的形式存储

二进制文件:以二进制的形式存储

三、怎么玩

先来了解一个概念

【文件指针】

又称文件类型指针,用 FILE 来表示

每个使用的文件都会有一个存放对应信息(文件名/文件状态/文件位置)的信息区放在内存中,具体来说,这些信息存放在一个系统自动创建的结构体变量中,FILE就是指向这块区域的指针。

请问喝牛奶分几步?

3步:打开牛奶,喝牛奶,盖好盖子

那么,文件的操作分几步?

3步:打开文件使用文件关闭文件

1. 文件的打开和关闭

注意:这是必须操作的步骤,而不是选做的。

FILE * fopen ( const char * filename, const char * mode ); //打开文件
int fclose ( FILE * stream );//关闭文件

ps:其中的mode表示文件的打开方式,一般有以下这些

文本文件:r只读 / w只写 / a追加

r+读写打开 / w+读写建立 / a+文件尾读写

二进制文件:rb只读 / wb只写 / ab追加

rb+读写打开 / wb+读写建立 / ab+文件尾读写

*文件打开时未设置路径则默认当前工作路径

直接看例子可能会更好理解一些

【例子】

#include <stdio.h>
int main () {
    FILE * pFile;
    //打开文件
    pFile = fopen ("myfile.txt","w"); 

    if (pFile!=NULL)
    {
        fputs("fopen example",pFile); //文件操作
        fclose(pFile);//关闭文件
    }
    return 0; 
}

2. 文件的顺序读写

功能函数名
字符输入函数fgetc
字符输出函数fputc
文本行输入函数fgets
文本行输出函数fputs
格式化输入函数fscanf
格式化输出函数

fprintf

二进制输入

fread

二进制输出fwrite

*前8个适用于所有输入输出流,最后2个适用于文件

以之前文章中的通讯录为例,更加详细的内容可见之前发过的文章

void LoadContact(Contact* pc)
{
	FILE* pf = fopen("Contact.txt", "rb");//打开文件,以读取二进制文件的形式
	if (pf == NULL)
	{
		perror("LoadContact");//打印错误信息
		return;
	}//打开失败判断
	Peoinfo tmp = { 0 };
	while (fread(&tmp, sizeof(Peoinfo), 1, pf))
//fread参数解读:读取到的数据存放的地址,读取数据的大小,读取数据的个数,读取数据的位置
	{
		CheckCapacity(pc);

        //读取文件信息
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}
    //关闭文件
	fclose(pf);
	pf = NULL;
}
void SaveContact(Contact* pc)
{
	FILE* pf = fopen("contact.txt", "wb");//以输入数据的方式打开文件
	if (pf == NULL)
	{
		perror("SaveContact");
		return;
	}
	//写信息到文件
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		//fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pf);
		fwrite(pc->data+i, sizeof(PeoInfo), 1, pf);//参数类似fread
	}
 
	fclose(pf);//关闭文件!!!千万要记得!!!
	pf = NULL;//并且把指针置空
}

03-21
### Qwen 32B 模型使用说明 #### 关于 Qwen 32B 的基本信息 Qwen 32B 是一种大型语言模型,其默认版本经过了 4-bit 量化处理,从而显著降低了运行所需的硬件资源需求。这种优化后的模型仅需约 24GB 显存即可正常工作[^1]。然而,需要注意的是,虽然该量化版本能够满足大多数应用场景的需求,但在某些特定任务上的表现可能略逊于未量化的原始版本。 如果希望获取更高精度的结果,则可以考虑部署未经压缩的全尺寸模型;不过这样做通常意味着更高的计算成本以及更严格的 GPU 资源要求。 对于那些希望通过较低门槛体验高性能 AI 技术的人来说,在 AutoDL 平台上利用已有的基础设施来加载并测试这些预训练好的大模型无疑是一种便捷的选择。 #### 获取与下载文档及相关资料的方法 ModelScope 提供了一个详细的项目概述页面链接地址 https://www.modelscope.cn/models/qwen/Qwen1.5-32B-Chat-GGUF/summary ,这里包含了有关如何正确设置环境变量以及其他必要的配置参数的信息[^2]。通过访问上述网址,你可以找到关于此具体变体 (即 Qwen1.5-32B Chat GGUF 版本) 更加详尽的技术细节描述及其对应的 API 接口调用方式等内容介绍。 此外,当涉及到实际操作层面时——比如怎样借助 ollama 工具实现本地化部署流程或者采用 vLLM 来管理远程服务器端的服务实例等方面的知识点,则分别有专门针对这两部分内容所设计的操作指南可供查阅学习[^3][^4]: - **Ollama 部署指引**: 描述了按照指定目录结构 (`/models/Publisher/Repository`) 组织存储相关文件的最佳实践建议; - **VLLM 容器编排教程**: 展示了创建 Docker Compose 文件的具体方法,并指导用户完成整个服务初始化过程中的每一步骤动作,包括但不限于启动容器命令执行情况反馈记录查看技巧等等实用技能分享环节部分。 以下是基于 VLLM 启动 Qwen 32B 模型的一个简单脚本例子: ```bash root@node37:/disk1/Qwen2.5-32B-Instruct-GPTQ-Int4# docker compose -f docker-compose.yml up -d ``` 要监控当前正在运行的任务状态变化趋势图谱数据展示效果的话,可以通过如下指令快速定位到目标日志位置处进行实时跟踪观察活动进展状况更新频率图表绘制功能模块集成开发框架支持特性一览表对比分析报告撰写模板样式定义标准规范手册编写原则要点总结归纳结论形成机制探讨研究方向探索未来发展趋势预测评估体系构建思路启发创新思维模式转换路径规划方案制定决策依据参考资料推荐列表汇总整理成果验收评价指标设定范围划定界限划分区域分配比例调整策略选择优先级排序规则确立基础理论支撑证据链完整性验证逻辑推理严密性审查论证充分必要条件判断准则建立科学实验设计方案构思创意表达形式多样化尝试可能性空间拓展维度增加复杂度提升层次感增强视觉冲击力强化记忆点突出重点强调核心价值体现社会责任担当使命感责任感培养意识觉醒觉悟提高行动自觉主动性积极性调动激发潜能释放创造力发挥最大效益最大化利益回报率最优解求解算法效率最高时间最短距离最近路线最佳匹配组合排列顺序合理安排布局紧凑美观大方得体优雅高贵气质展现个人魅力风采彰显团队协作精神风貌呈现企业文化内涵传承历史积淀文化底蕴弘扬时代主旋律唱响正气歌颂美好新生活向往追求理想境界升华人生意义探寻终极真理解答疑惑困惑释疑解惑开导心灵启迪智慧增长见识开阔视野拓宽思路转变观念突破瓶颈取得进步获得成功享受幸福快乐时光留下珍贵回忆纪念重要时刻见证成长历程记录奋斗足迹铭刻永恒瞬间定格美丽画面捕捉精彩片段剪辑成片制作视频传播正能量影响更多人加入共同创造更加美好的明天共同努力不懈奋斗不息勇往直前无惧挑战迎难而上战胜困难克服障碍达成目标实现梦想成就辉煌伟业铸就传奇篇章谱写华彩乐章奏响激昂战歌激励一代又一代人为之努力拼搏奉献青春热血书写属于自己的壮丽史诗!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值