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

[C++][IO流][流输入输出][截断理解]详细讲解

目录

  • 1.流输入输出说明
    • 1.<<执行顺序
    • 2.>>执行顺序
  • 2.截断(trunc)理解


1.流输入输出说明

1.<<执行顺序

  • 链式操作的顺序:当使用多个<<操作符进行链式插入时,执行顺序是从左到右的
    • 每个<<操作都将数据插入到前一个流的输出中
  • 设置流状态
    • 在执行<<操作之前,所有设置(如std::setw(), std::setfill(), std::hex等)都会影响到后续插入的操作
    • 这些设置是全局性的,一旦设置,它们会持续影响后续的所有插入,直到再次改变或重置
  • 插入数据
    • 一旦流状态被设置好,流会根据当前的格式化状态(如宽度、填充字符和进制)处理随后的插入操作
    • 每次插入操作都会根据当前流的状态输出格式化后的结果
  • 示例代码
    ss << std::setw(2) << std::setfill(0) << std::hex \<< distribution(generator);
    

2.>>执行顺序

  • >>运算符用于从输入流中提取数据,其执行顺序和影响顺序与<<有一些相似之处
  • 区别:流状态
    • 在执行>>操作之前,流的状态(例如有效性、错误状态、EOF等)会影响后续的提取操作
      • 如果流的状态是错误的(流已经到达结束或遇到读取错误),则提取操作将失败
    • 一旦流读取失败,后续的>>操作将不会执行,直到流状态被重置

2.截断(trunc)理解

  • 文件阶段的含义
    • 截断到零:如果打开一个已存在的文件并以std::ios::trunc模式打开它,文件的所有内容将被删除,文件的大小变为零
      • 这意味着你会清空文件中的所有数据
    • 指定长度的截断:虽然C++的标准库没有直接提供指定长度截断的功能,但可以通过其他系统调用(如 POSIX 中的 ftruncate)实现
  • 形象理解:截断在文件操作中的通常意义是丢弃文件的原有内容,并准备写入新的数据
    • 清空文件:如果文件已经存在,它的内容会被清空,文件大小变为零
    • 写入新内容:接下来可以写入新的数据,这些新数据将替代原有的内容
  • 注意事项
    • 数据丢失:使用trunc会永久删除文件中的数据,因此在使用时需要小心
    • 文件必须存在:对于trunc模式,文件必须已存在,否则会出现错误

相关文章:

  • 【EXCEL数据处理】000011 案列 EXCEL带有三角形图标的单元格转换
  • OSPF路由计算
  • golang rpc
  • 若依从redis中获取用户列表
  • Java使用Redis的详细教程
  • AIGC: 10 AI转文服务器的搭建过程记录
  • CTMO时代下的营销新力量:2+1链动模式AI智能名片商城小程序
  • 【React】react项目中的redux使用
  • git初级使用学习(图文)
  • Java零工市场小程序如何改变自由职业者生活
  • android.bp cc_test
  • 【MySQL内置数据库】 mysql
  • HTTP 1.0 2.0 3.0详解
  • GO语言环境搭建和字符说明
  • Android studio配置AVD虚拟机
  • Akka系列(七):Actor持久化之Akka persistence
  • Angularjs之国际化
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CentOS 7 防火墙操作
  • DataBase in Android
  • JS数组方法汇总
  • Koa2 之文件上传下载
  • Mysql5.6主从复制
  • oschina
  • supervisor 永不挂掉的进程 安装以及使用
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于游标的分页接口实现
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 理清楚Vue的结构
  • 聊聊sentinel的DegradeSlot
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端路由实现-history
  • 前嗅ForeSpider教程:创建模板
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • Spring Batch JSON 支持
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (11)MATLAB PCA+SVM 人脸识别
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (C语言)fgets与fputs函数详解
  • (k8s)Kubernetes本地存储接入
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (SERIES10)DM逻辑备份还原
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (力扣)循环队列的实现与详解(C语言)
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (三) diretfbrc详解
  • (三)c52学习之旅-点亮LED灯
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)