当前位置: 首页 > news >正文

C语言:文件(写入,读取)

磁盘文件分为文本文件和二进制文件。

区分二者很简单,我们可以选定一个文件,以记事本打开,如果其中的内容你能看懂,他就是一个文本文件,相反,如果是一堆你看不懂的东西,那他就是二进制文件。

常见的文本文件有.c  .txt  .cpp  .h等。

要使用文件我们首先要打开文件:

#include<stdio.h>
FILE* fopen(const char* filename,const char* mode);
//filename:需打开的文件名(路径)  mode:打开文件的模式设置
//此方式不安全,安全方法在下方例子中

若成功打开会返回文件指针,若失败则返回NULL。

mode有:

r:只读取,若文件不存在,fopen调用失败

w:写入,若文件不存在则创建,若文件存在则清空

a:追加写入,若文件不存在则创建

r+:既能读又能写,文件必须存在

w+:既能读又能写,若文件不存在则创建,若文件存在则清空

a+:既能读又能写,若文件不存在则创建

二进制文件的打开方式要在以上这些方式后加一个b

如rb,wb,ab,rb+,wb+,ab+

具体写入区别:例如:原本文件里如果是abcdefg,然后用几种写入方式分别写入1234

r+:1234efg

w/w+:1234

r/r+:abcdefg1234

例子:

#include<stdio.h>int main()
{//FILE* pFile = fopen("D:\\11111.txt", "r");//不安全//注意把所有跟路径相关字符串中的\补成\\FILE * pFile = NULL;fopen_s(&pFile, "D:\\11111.txt", "r");fclose(pFile);//关闭文件return 0;
}

在打开和关闭文件中,进行操作文件。

读取:

#include<stdio.h>int main()
{FILE * pFile = NULL;fopen_s(&pFile, "D:\\11111.txt", "r+");char buf[1024] = { 0 };//读取size_t size=fread(buf, 1, 1024, pFile);//参数分别为数据的存储位置,项目大小,要读取项目的最大数量,指向FILE结构的指针//当数为2和4时 2*4=8 4表示项//printf("%s\n", buf);//printf("%d\n", size);//当文件中为abcdefg,当2和4时显示读了3项 6字节 因为只有前三项读满了fclose(pFile);//关闭return 0;
}

写入:

#include<stdio.h>int main()
{FILE * pFile = NULL;fopen_s(&pFile, "D:\\11111.txt", "r+");fwrite("1234", 1, 4, pFile);//参数分别为指向要写入的数据的指针,项大小,要写入项的最大数量,指向FILE的指针fclose(pFile);return 0;
}
#include<stdio.h>int main()
{FILE * pFile = NULL;fopen_s(&pFile, "D:\\11111.txt", "r+");//例:此时文件内为abcdefgchar buf[1024] = { 0 };size_t size=fread(buf, 1, 4, pFile);//只读前四个fseek(pFile, 0, SEEK_CUR);//从读到的位置开写//从读到写或从写到读,若没有经历文件尾的话必须调用函数去干预,否则会出错fwrite("1234", 1, 4, pFile);//此时文件abcd1234fclose(pFile);//关闭return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Angular路由使用
  • 培训第三十四天(初步了解Docker与套接字的应用)
  • [数据集][目标检测]木材缺陷检测数据集VOC+YOLO格式2383张10类别
  • C++学习笔记之数据结构
  • Prometheus 服务发现
  • k8s Unable to fetch container log stats failed to get fsstats for
  • 常规方法调用Mapper对象bean,批量插入数据
  • API接口安全101:基础概念与最佳实践
  • 企业高性能web服务器【Nginx详解】
  • jmeter简单发送接口
  • 龙门吊(天车)防撞方案
  • HarmonyOS开发实战:应用权限/通知设置跳转方案
  • ZooKeeper入门及核心知识点整理
  • 在Windows Server上安装typecho博客程序(基于IIS)
  • [CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(4)
  • JS 中的深拷贝与浅拷贝
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 《Java编程思想》读书笔记-对象导论
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CODING 缺陷管理功能正式开始公测
  • const let
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript数组去重/查找/插入/删除
  • Java比较器对数组,集合排序
  • markdown编辑器简评
  • mysql外键的使用
  • node和express搭建代理服务器(源码)
  • pdf文件如何在线转换为jpg图片
  • Redis 中的布隆过滤器
  • swift基础之_对象 实例方法 对象方法。
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 对超线程几个不同角度的解释
  • 如何设计一个比特币钱包服务
  • 深入浅出Node.js
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 手机端车牌号码键盘的vue组件
  • 听说你叫Java(二)–Servlet请求
  • 通信类
  • 为什么要用IPython/Jupyter?
  • 正则表达式
  • 国内开源镜像站点
  • #565. 查找之大编号
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (35)远程识别(又称无人机识别)(二)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (三)终结任务
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十六)一篇文章学会Java的常用API
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法)前K大的和
  • (一)Neo4j下载安装以及初次使用