C++ 读取文件和写入文件

2023-11-18

C++读取文件

有两种方式可以实现读文件的功能
第一种:
用fread实现,这种方法适合读取各种结构化的数据包

#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <string.h>
int main(){
	FILE *file_pointer = fopen("/home/data/abc.dat", "rb");
	//假设数据包abc.dat中存储的是DiyInfo类型的结构体
	DiyInfo diy_info;
	while (!feof(file_pointer)) {
   		//从数据文件中读取数据,放入diy_info中进行反序列化
   		fread(&diy_info, sizeof(char), sizeof(DiyInfo), file_pointer);
   		//打印读出来的结果
   		printf(diy_info.xxxxx);
	}
	fclose(file_pointer);
	return 0;
}

第二种:
用fstream实现,这种方式适合读取一行一行的文本文件

#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
using namespace std;
//解析一行文本的函数,可以将一行字符串按照空格打断,把里面的词取出来装进vector向量
vector<string> parseLine(string line) {
    vector<string> v;
    int pos = 0;
    int pos2 = 0;
    int len = line.length();
    while (pos < len) {
        pos2 = line.find(" ", pos);
        if (pos2 == -1)
            pos2 = len;
        v.push_back(line.substr(pos, pos2 - pos));
        pos = pos2 + 1;
    }
    return v;
}

int main(){
	ifstream input_file("/home/data/abc.txt");
	string line;
	//用getline()函数取出文件中的一行,存入字符串变量line中
	while (getline(input_file, line)) {
		//line是一大串字符串,如果需要把里面的词拿出来,就调用上面的parseLine函数
       vector<string> line_content = parseLine(line);
       //依次打印解出来的行中的单词
       for (int i = 0; i < line_content.size(); ++i) {
       		cout << line_content[i] << " ";
       }
       cout << endl;
    }
	input_file.close();
	return 0;
}

C++写文件

同样,有两种方式可以实现
第一种:
用fwrite实现,这种方法适合写入结构化的数据包

#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
int main(){
	FILE* file_pointer = fopen("./testfile.dat", "w");
	//假设要在数据包中写入DiyInfo类型的结构体
	DiyInfo diy_info;
	//向文件中写入1000帧
	for (int i = 0; i < 1000; ++i){
   		diy_info.xxxxx = 777;
   		fwrite(&diy_info, 1, sizeof(DiyInfo), file_pointer);
	}
	fclose(file_pointer);
	return 0;
}

第二种:
用fstream实现,这种方式适合一行一行写入文本文件,很简单,和cout几乎一模一样

#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
using namespace std;
int main(){
	std::ofstream output_file("./testfile.dat");
	DiyInfo diy_info;
	for (int i = 0; i < 1000; ++i){
		diy_info.xxxxx = i;
        output_file << "diy_info.xxxxx " << diy_info.xxxxx << endl;
        cout << "diy_info.xxxxx " << diy_info.xxxxx << endl;
	}
	outfile.close();
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 读取文件和写入文件 的相关文章

随机推荐

  • 期货开户的时间和流程

    对于一些想要做期货投资的朋友来说 最基本的就是首先要进行期货开户 那就需要了解开户具体的流程和相关注意事项 一般来说了解清楚一下三点就没什么问题了 一 对开户者本人的要求 1 年满18周岁 2 中国公民 有中国公民身份证 境内储蓄卡 3 没
  • pywinauto和PyUserInput实现windows程序自动化

    一 pywinauto 官方文档 https pywinauto readthedocs io en latest code code html 首先需要下个spy lite 便于查看程序窗口属性 主要模块 pywinauto applic
  • 通过jdbc实现GBase 8s Row类型数据插入与查询

    Row数据类型 由一个或多个任意的数据类型组成 例如 创建一个r1 t的Row数据类型 具有integer类型的i和boolean类型的b字段 参考语句如下 CREATE ROW TYPE r1 t i int b boolean 本文章详
  • Flutter:bottomNavigationBar图标白色的解决办法

    Flutter中 如果底部的Item超过三个 我们就需要为BottomNavigationBar设置一个type属性为 BottomNavigationBarType fixed 否则图标就会变成白色 导致什么都看不见
  • 设计模式之【观察者模式】

    观察者模式动机与定义 模式动机 一个对象的状态改变会引起其他对象的状态改变 模式定义 观察者模式 Observer Pattern 定义 定义对象间一种一对多的依赖关系 使得每当一个对象状态发生改变时 其相关依赖对象皆得到通知并被自动更新
  • few-shot learning, zero-shot learning, one-shot learning,any-shot learning, C-way K-shot,Meta-learn

    更新 2021 7 6 元学习 meta learning 与机器学习 machine learning machie learning 通常是单任务学习 每个任务有训练集和测试集 在训练集上训练模型 在测试集上测试模型 meta lear
  • 年底裸辞准备面试,我用7张图画了ZK分布式锁!

    一 写在前面 之前写过一篇文章 都2022年了 出去面试连分布式锁的源码你都不会画 给大家说了一下Redisson这个开源框架是如何实现Redis分布式锁原理的 这篇文章再给大家聊一下ZooKeeper实现分布式锁的原理 同理 我是直接基于
  • Python opencv学习-12 2D直方图绘制

    绘制2D直方图 要转换到hsv色彩空间 import cv2 import numpy as np from matplotlib import pyplot as plt img cv2 imread image pic2 png hsv
  • C++多线程:创建线程

    C 中线程的创建一般是通过std thread类实现的 具体的实现方式有以下几种 1 使用函数名创建 void pcreat int a cout lt lt start lt lt a lt lt endl int main thread
  • advisor2002仿真参数界面grade options不弹出设定窗口

    针对这种问题 解决办法如下 第一步 找到advisor2002安装路径 然后找到 advisor2002 gui gradefig m文件和gradefig mat文件 把gradefig m文件名改为GradeFig m再把gradefi
  • AD账号导入--dsadd user

    Microsoft Windows AD账号全命令方式操作 导入一 AD 叫active directory 中文活动目录 其实是一个数据库 下面将介绍以数据库方式操作AD 对象二 AD对象操作有如下 1 新建一个对象 用 dsadd
  • windows如何查看最近打开的文件及文件夹?

    按住win R快捷键 输入recent 即可看到最近打开的文件
  • C语言的每日一题(一)

    前言 今天开始 我将开启我的每日一题之路 作者 一颗带有痣的毛 期待你的关注 一 三位数反转 题目 输入一个三位数 分离出它的百位 十位和个位 反转后输入 样例输入 127 样例输出 721 首先我们来分析一下这一题的思路 这一题的主要思路
  • 九鼎Study210嵌入式开发板刷机笔记

    本刷机笔记是基于S5PV210的九鼎Study210嵌入式开发板 准备 电脑通过串口线连接到开发板的UART2 靠近电源 与裸机不同 usb线连接到开发板OTG端口 开发板接入电源 串口助手打开 开机 只要连接成功 无论开发板是否启动了ub
  • Android系统控件使用的踩坑日志

    1 ListView在乐视 三星手机上出现崩溃 修复listview在部分手机上崩溃 java lang IndexOutOfBoundsException Invalid index 0 size is 0 at java util Ar
  • 【ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX】

    文章目录 ARM64 无符号位域提取指令 上篇文章 ARM 常见汇编指令学习 2 存储指令 STP 与 LDP 下篇文章 ARM 常见汇编指令学习 4 ARM64 比较指令 cbnz 与 b ne 区别 ARM64 无符号位域提取指令 在代
  • 图片上传提交前,图片显示在页面上

    lt div class upload box gt lt b gt 上传图片 lt input type file name file id file accept image onchange imgChange this gt lt
  • MMSegmentation笔记07:使用MMDeploy部署

    1 安装MMDeploy 首先要安装MMDeploy库 直接在对应环境下执行命令 pip install mmdeploy 1 2 0 然后在对应项目下安装MMDeploy源码 在cmd中执行 git clone https github
  • 求建议:二本计算机专业,考研还是就业做开发?

    安老师好 我是一个大连某二本院校的在读生 专业是计算机 日语强化 上大学以来一直关注着您的公众号 读了很多您的文章 学到很多东西 也受到过您的鼓舞 随您一同成长进步 目前我已是大三下 站在第二个人生岔路口 正为各种浮在空中的想法烦恼不已 身
  • C++ 读取文件和写入文件

    C 读取文件 有两种方式可以实现读文件的功能 第一种 用fread实现 这种方法适合读取各种结构化的数据包 include