C++文件处理与C语言不同,C++文件处理使用的是:流(stream)
C++头文件fstream定义了三个类型来支持文件IO

  • ifstream从一个给定文件中读取数据
  • ofstream向一个给定文件写入数据
  • fstream可以读写文件

这些类型提供的操作与我们之前已经使用过的cincout操作一样。特别是,我们可以使用IO运算符(>>和<<)来读写文件,也可使用getline从一个ifstream中读取数据。

图1. fstream特有的操作(图片来源于参考[1])

一、读txt文件

现有cameras.txt文件,内容如下
读取txt文件,并逐行打印

# Camera list with one line of data per camera:
# CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
# Number of cameras: 1
0 PINHOLE 6220 4141 3430.27 3429.23 3119.2 2057.75
// Author: Programmer ToddyQi
// Date: 2020-02-12
#include <iostream>
#include <fstream> // 头文件 For both fstream and ifstream
#include <string> using namespace std; int main() {
string path = "./cameras.txt"; ifstream in_file(path, ios::in); //按照指定mode打开文件 // is_open()函数返回一个bool值,指出与in_file关联的文件是否成功打开且未关闭
if (in_file.is_open()) { // 或者if (in_file)
cout << "Open File Successfully" << endl;
string line;
while(getline(in_file, line)) {
cout << line << endl;
}
} else {
cout << "Cannot Open File: " << path << endl;
getchar();
return EXIT_FAILURE;
}
in_file.close(); // 关闭与in_file绑定的文件,返回void getchar();
return EXIT_SUCCESS;
}

图2. 实验运行结果

二、写txt文件

main()函数如下,main()函数之前的部分同上

int main()
{
string path = "./log.txt"; ofstream out_file(path, ios::out | ios::app); //按照指定mode打开文件
// ofstream out_file(path, ios::out); if (out_file.is_open()) {
cout << "Open File Successfully" << endl;
out_file << "Have a Nice Day!" << endl;
} else {
cout << "Cannot Open File: " << path << endl;
getchar();
return EXIT_FAILURE;
}
out_file.close(); getchar();
return EXIT_SUCCESS;
}

图3. 实验运行结果

Code is Here: 点击查看详细内容 TODO

// 解析cameras.txt文件
void Reconstruction::ReadCamerasText(const std::string& path) {
cameras_.clear();

std::ifstream file(path);
CHECK(file.is_open()) << path; std::string line;
std::string item; while (std::getline(file, line)) {
StringTrim(&line);
if (line.empty() || line[0] == '#') {
continue;
} std::stringstream line_stream(line); class Camera camera; // ID
std::getline(line_stream, item, ' ');
camera.SetCameraId(std::stoul(item)); // MODEL
std::getline(line_stream, item, ' ');
camera.SetModelIdFromName(item); // WIDTH
std::getline(line_stream, item, ' ');
camera.SetWidth(std::stoll(item)); // HEIGHT
std::getline(line_stream, item, ' ');
camera.SetHeight(std::stoll(item)); // PARAMS
camera.Params().clear();
while (!line_stream.eof()) {
std::getline(line_stream, item, ' ');
camera.Params().push_back(std::stold(item));
} CHECK(camera.VerifyParams()); cameras_.emplace(camera.CameraId(), camera);

}
}

参考

C++文件处理(一):读/写txt文件的更多相关文章

  1. 【学习总结】GirlsInAI ML-diary day-15-读/写txt文件

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day15 认识读/写txt文件 路径: 绝对路径:文件在电脑中的位置 相对路径:下面会用到 1-准备 新建一个 pytho ...

  2. WPF: 读取XPS文件或将word、txt文件转化为XPS文件

    读取XPS格式文件或将doc,txt文件转化为XPS文件,效果图如下: 1.XAML页面代码: <Window x:Class="WpfWord.MainWindow" xm ...

  3. WFP: 读取XPS文件或将word、txt文件转化为XPS文件

    读取XPS格式文件或将doc,txt文件转化为XPS文件,效果图如下: 1.XAML页面代码: <Window x:Class="WpfWord.MainWindow"    ...

  4. 读取同一文件夹下多个txt文件中的特定内容并做统计

    读取同一文件夹下多个txt文件中的特定内容并做统计 有网友在问,C#读取同一文件夹下多个txt文件中的特定内容,并把各个文本的数据做统计. 昨晚Insus.NET抽上些少时间,来实现此问题,加强自身的 ...

  5. C++实现从一个文件夹中读出所有txt文件

    前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法:首先了解一下这个结构体struct _finddata_t {    unsigned    attrib;    t ...

  6. MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中

    MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...

  7. C#做一个写txt文件流的测试,为什么配置低的机器写入的还快

    测试机:笔记本i7 8G 固态硬盘 由于采取读码写入txt方式, 读码频率挺高,文件名为日期格式,当前采用每次读码打开文件写入的方式, 为什么没用sb,因为怕断电情况的数据丢失.所以采取每条存入的方式 ...

  8. day9 python学习 文件的操作 读 写 seek

    文件的操作 1   文件的打开操作: 文件句柄 = open('文件路径', '模式') f=open('wangyakun','a+',encoding='utf-8') #文件名, 如果是绝对路径 ...

  9. .Net写txt文件-简单的记录执行日志信息代码

    在执行一些批量操作时,想记录一些执行日志信息,越简单方便越好啊.提供一个常用的简单方法,将信息记录在txt文件里: public static void log(string content, str ...

随机推荐

  1. mplayer使用心得[转]

    一直在用mplayer,其他的播放器很少用.以下是我使用过程中的一些心得.  注意,下面用的路径都是在我的电脑上的路径,使用时请不要照抄!应该换成你的电脑上的正确路径.  一.首先还是讲安装方面的问题 ...

  2. 如何更改Jframe里Jpanel的大小

    先贴代码: package xiya; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; ...

  3. vscode下搭建vue.js开发环境(基于最新的@Vue/cli 4.2.2)

    2020-02-13. 网上的那些怎么安装vue环境的2.x就不要再看了,都过时了,现在去官网下载,按照他们的设置各种问题.接下来看下最新的安装方法. 前四步是一样的: 1.下载并安装vscode 2 ...

  4. MySQL初次安装配置及修改密码

    安装前的准备工作: 下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\mysql-8.0.11 下. 接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 ...

  5. Asp.net core下利用EF core实现从数据实现多租户(1)

    前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...

  6. Codeforces 1117C Magic Ship (二分)

    题意: 船在一个坐标,目的地在一个坐标,每天会有一个风向将船刮一个单位,船也可以移动一个单位或不动,问最少几天可以到目的地 思路: 二分天数,对于第k天 可以分解成船先被吹了k天,到达坐标(x1+su ...

  7. Android Studio 学习笔记(二):布局简介和xmlns说明

    初学Android Studio,是在b站看的教程视频,这里的笔记也是以其为基础的,个人强烈安利: [天哥]Android开发视频教程最新版 Android Studio开发 Android 布局简介 ...

  8. python之字典遍历方法

    字典遍历分为三种: 遍历key 遍历value 遍历key-value key遍历: >>> person={','city':'BeiJing'} >>> for ...

  9. 这个 Spring 循环依赖的坑,90% 以上的人都不知道

    1. 前言 这两天工作遇到了一个挺有意思的Spring循环依赖的问题,但是这个和以往遇到的循环依赖问题都不太一样,隐藏的相当隐蔽,网络上也很少看到有其他人遇到类似的问题.这里权且称他非典型Spring ...

  10. 【Bullet引擎】Bullet物理引擎简单说明

    说明 Bullet是一款开源的物理模拟计算引擎,包括刚体.柔体.弹性体等,是世界三大物理模拟引擎之一(包括Havok和PhysX),被广泛应用于游戏开发(GTA5等)和电影(2012等)制作中. Bu ...