(C++) 文件读写基础

文章目录

  • 🗂️前言
    • 📄ref
    • 📄访问标记
      • 🗃️流打开模式类型
  • 🗂️Code
    • 📄demo
    • 📄分点讲解
      • 🗃️打开/关闭
      • 🗃️写
      • 🗃️读
      • 🗃️状态函数
  • 🗂️END
    • 🌟关注我

🗂️前言

📄ref

  • std::basic_fstream - cppreference.com
  • std::basic_ifstream - cppreference.com
  • std::basic_ofstream - cppreference.com

📄访问标记

🗃️流打开模式类型

std::ios_base::openmode - cppreference.com

常量描述
app每次写入前寻位到流结尾
binary以二进制模式打开
in为读打开
out为写打开
trunc在打开时舍弃流的内容
ate打开后立即寻位到流结尾
noreplace (C++23)以独占模式打开

🗂️Code

📄demo

#include <cstring>
#include <fstream>
#include <iostream>void check_io(std::ios& io) {if (io.good()) {std::cerr << " io is good." << std::endl;}if (io.fail()) {std::cerr << " io is fail." << std::endl;}if (io.bad()) {std::cerr << " io is bad." << std::endl;}if (io.eof()) {std::cerr << " io is eof." << std::endl;}io.clear();
}void file_write(std::string file_path) {std::ofstream ofs;ofs.open(file_path, std::ios::out);if (!ofs.is_open()) {std::cerr << "File Open Error" << std::endl;return;}char msg[] = "https://space.bilibili.com/8172252";ofs << "cuber-lotus" << std::endl;for (char ch : {'u', 'r', 'l', ':'}) {ofs.put(ch);}ofs.write(msg, strlen(msg));std::cout << __func__;check_io(ofs);ofs.close();
}void file_read(std::string file_path) {std::ifstream ifs;ifs.open(file_path, std::ios::in);if (!ifs.is_open()) {std::cerr << "File Open Error" << std::endl;return;}#define CASE 1#if CASE == 1char buf[1024] = {};while (ifs >> buf) {std::cout << buf << std::endl;}
#elif CASE == 2char buf[1024] = {};while (ifs.getline(buf, sizeof(buf))) {std::cout << buf << std::endl;}
#elif CASE == 3std::string buf;while (std::getline(ifs, buf)) {std::cout << buf << std::endl;}
#elif CASE == 4int ch;while ((ch = ifs.get()) != EOF) {std::cout << (char)ch;}std::cout << std::endl;
#elif CASE == 5char buf[1024] = {};while (ifs.read(buf, sizeof(buf))) {std::cout << buf << std::endl;}
#endifstd::cout << __func__;check_io(ifs);ifs.close();
}int main() {const std::string file_path = "example.txt";file_write(file_path);file_read(file_path);
}

📄分点讲解

C++用类封装了流式操作,使用体验是更加丰富,更加多。
在这里插入图片描述

🗃️打开/关闭

// fstream 可以同时管理 i/o
std::fstream fs;
fs.open(file_path, std::ios::out | std::ios::in);
if (!fs.is_open()) {std::cerr << "File Open Error" << std::endl;return;
}
fs.close();

🗃️写

法1:

ofs << "cuber-lotus" << std::endl;

法2:

char msg[] = "https://space.bilibili.com/8172252";
ofs.write(msg, strlen(msg));

法3:

ofs.put(ch);

🗃️读

法1:

char buf[1024] = {};
while (ifs >> buf) {std::cout << buf << std::endl;
}

法2:

char buf[1024] = {};
while (ifs.getline(buf, sizeof(buf))) {std::cout << buf << std::endl;
}

法3:

std::string buf;
while (std::getline(ifs, buf)) {std::cout << buf << std::endl;
}

法4:

int ch;
while ((ch = ifs.get()) != EOF) {std::cout << (char)ch;
}
std::cout << std::endl;

法5:

char buf[1024] = {};
while (ifs.read(buf, sizeof(buf))) {std::cout << buf << std::endl;
}

🗃️状态函数

状态函数
good检查是否没有发生错误,即是否可执行输入/输出操作 (std::basic_ios<CharT,Traits> 的公开成员函数)
eof检查是否到达了文件末尾 (std::basic_ios<CharT,Traits> 的公开成员函数)
fail检查是否发生了可恢复的错误 (std::basic_ios<CharT,Traits> 的公开成员函数)
bad检查是否已发生不可恢复的错误 (std::basic_ios<CharT,Traits> 的公开成员函数)
operator!检查是否有错误发生(fail() 的同义词) (std::basic_ios<CharT,Traits> 的公开成员函数)
operator bool检查是否没有发生错误(!fail() 的同义词) (std::basic_ios<CharT,Traits> 的公开成员函数)
rdstate返回状态标志 (std::basic_ios<CharT,Traits> 的公开成员函数)
setstate设置状态标志 (std::basic_ios<CharT,Traits> 的公开成员函数)
clear修改状态标志 (std::basic_ios<CharT,Traits> 的公开成员函数)



🗂️END

🌟关注我

关注我,学习更多C/C++,算法,计算机知识

B站:

👨‍💻主页:天赐细莲 bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【YOLOv10[基础]】热力图可视化实践① | 支持视频热力图 | 密度热力图 | 论文必备

本文将进行添加YOLOv10版本的热力图可视化功能的实践,支持视频的热力图可视化。 目录 一 热力图可视化实践① 1 代码 2 效果图 在论文中经常可以见到提取的物体特征以热力图的形式展示出来,将特征图以热力图的方式进行可视化在深度学习中有以下的原因: ①强调激活区域 ,…

MongoDB教程(十八):MongoDB MapReduce

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MapRed…

数据库对象中出现复杂的对象嵌套,如何使用Mybatis plus优雅的解决这个问题:

起因 类原型&#xff1a; 在User类&#xff1a; package com.itheima.mp.domain.po;import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import java.time…

VBA:随机生成100以内两位数加减法练习

给儿子用&#xff0c;每天一百道&#xff0c;哈哈哈 Sub add_ranknum()Dim num1 As Integer, num2 As Integer, num3 As Integer, temp As Integer Dim operat As StringFor c 1 To 10 Step 2 For i 1 To 20 NX:Randomizenum1 Rnd * 99num2 Rnd * 99If num1 num2 Then GoT…

阿里云ubuntu宝塔面板部署uni-app-flask-websocket前后端项目

1.下载宝塔面板 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 然后去安全组开放对应的端口 面板账户登录信息 【云服务器】请在安全组放行 29725 端口 进入控制面板后修改默认用户名和密码 2. …

HTML 相册2.0 通过css 获取图片资源 2024/7/22 日志

简单方法通过css 绕过同源策略 以获取资源 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>水面倒影…

从理论到实践:如何用 TDengine 打造完美数据模型​

在用 TDengine 进行数据建模之前&#xff0c;我们需要回答两个关键问题&#xff1a;建模的目标用户是谁&#xff1f;他们的具体需求是什么&#xff1f;在一个典型的时序数据管理方案中&#xff0c;数据采集和数据应用是两个主要环节。如下图所示&#xff1a; 对于数据采集工程师…

EXCEL怎么自动添加表格吗?

第一步&#xff0c;选中需要添加表格的范围 第二步&#xff0c;点击开始&#xff0c;选择条件格式&#xff0c;“使用公式确定要设置格式的单元格” 第三步&#xff0c;编辑规则说明加上<>"" 第四步&#xff0c;点击边框&#xff0c;选择外边框确定即可&#x…

电脑没有摄像头怎么用手机当摄像头?虚拟摄像头使用的详细教程来了(全)

随着科技水平以及全球化经济的快速发展&#xff0c;视频会议、在线课程和直播已经成为日常办公或者生活中必不可少的一个环节。然而&#xff0c;在如今仍有许多台式电脑和一些老旧的笔记本电脑并没有内置摄像头&#xff0c;亦或者自带的摄像头质量不够理想&#xff0c;这使得视…

1小时上手Alibaba Sentinel流控安全组件

微服务的雪崩效应 假如我们开发了一套分布式应用系统&#xff0c;前端应用分别向A/H/I/P四个服务发起调用请求&#xff1a; 但随着时间推移&#xff0c;假如服务 I 因为优化问题&#xff0c;导致需要 20 秒才能返回响应&#xff0c;这就必然会导致20秒内该请求线程会一直处于阻…

跟代码执行流程,读Megatron源码(四)megatron训练脚本initialize.py之initialize_megatron()分布式环境初始化

在前文中&#xff0c;我们讲述了pretrain函数的执行流程&#xff0c;其首要步骤是megatron分组的初始化与环境的配置。本文将深入initialize_megatron函数源码&#xff0c;剖析其初始化分布式训练环境的内部机制。 注&#xff1a;在此假设读者具备3D并行相关知识 一. initiali…

react入门到实战-day2-7.21

昨天晚上刚学完已经一点了&#xff0c;来不及写笔记&#xff0c;主要是想睡觉哈&#xff0c;所以今天补上&#xff0c;我发现效率还挺高的&#xff0c;今天重新做笔记&#xff0c;加固了昨天的知识点&#xff0c;要不以后都这样子哈&#xff0c;学完第二天再写哈&#xff0c;要…

【Linux】从零开始认识多线程 --- 线程ID

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 1 前言 上一篇文章中讲解了线程控制的基本接口&#xff1a; 线程创建pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);: pthread_t *thread :输出…

OpenCV分水岭算法watershed函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 我们将学会使用基于标记的分水岭算法来进行图像分割。我们将看到&#xff1a;watershed()函数的用法。 任何灰度图像都可以被视为一个地形表…

【数据结构_C语言】归并排序—文件类型

文章目录 1.排序定义2. 代码实现 1.排序定义 内排序&#xff1a;数据量相对少一些&#xff0c;可以放到内存中排序。 外排序&#xff1a;数据量较大&#xff0c;内存中放不下&#xff0c;数据放到磁盘文件中&#xff0c;需要排序。 归并排序&#xff1a; 2. 代码实现 void…

Flask 框架 redirect() url_for()

url_for url_for 函数根据传入的端点名称&#xff08;即路由函数名&#xff09;生成对应的 URL。 1. url_for() url_for 函数根据传入的端点名称&#xff08;即路由函数名&#xff09;生成对应的 URL。 它接受一个或多个参数&#xff0c;其中第一个参数是路由的名称&#x…

挖掘基于边缘无线协同感知的低功耗物联网 (LPIOT) 的巨大潜力

关键词&#xff1a;边缘无线协同感知、低功耗物联网(LPIOT)、无线混合组网、用电监测、用电计量、多角色、计量插座、无线场景感知、多角色运用、后台边缘层&#xff0c;网络边缘层&#xff0c;场景能效管理&#xff0c;场景能耗计算 在数字化和智能化日益加速的今天&#xff…

甄选范文“论面向方面的编程技术及其应”,软考高级论文,系统架构设计师论文

论文真题 针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编程(Aspect Oriented Programming,AOP)技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序,通常要把程序进行功能划分和封装。一般系统中的某些通用功能,如安全性、持续性、日…

C++ —— STL简介

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本…

【Java】中的List集合

目录 一、什么是List集合二、List的常用方法List的初始化元素操作1.添加元素2.删除元素3.修改元素4.查询元素 三、List集合的遍历1.for循环遍历2.增强for循环3.迭代器遍历 一、什么是List集合 List集合是最常用的一种数据结构之一。它具有动态扩容、元素添加、删除和查询等基础…