使用ifstream读写配置
ifstream标准c++的读写是非常方便的,效率也很不错,但是有几点需要注意的地方。
如下的配置文件 in.txt #418511899@qq.com-author:钱波-qianbo-2021-02-28 ##field id(int):address(varchar):width(int):height(int) 1 rtsp://127.0.0.1/l.264 1280 720 //camera1 2 rtsp://127.0.0.1/l.264 1280 720 45 rtsp://127.0.0.1/l.264 640 360
我们按照习惯使用# 或者 // 来注释,表明不需要用这一行配置,而使用空格来表明字段之间的分隔。如上有四个变量字段需要读写,1 id 2 地址 3 宽度 4 高度,而标准c++是可以使用>>来直接将文件等内容直接移入变量的。
//首先打开文件
std::ifstream infile("in.txt", std::ios::in); //以文本模式打开in.txt备读
if (!infile) { //打开失败
std::cout address>>width>>height;
这样是可以的,非常方便,可以直接移入整形变量,或者float,double,唯一值得注意的地方是>>操作符,到文件结尾的时候需要多读一次看是否文件结束,稍有不慎程序员以为多读了一次,自己的变量怎么多读了一行,所以要使用移位符号后,立刻判断是否到了文件结尾。判断是否是注释函数:
static bool ifnote(const std::string & tmp)
{
if (tmp.empty())
return false;
int l = (int)tmp.length();
char a = tmp[0];
char b;
if (l >= 2)
b = tmp[1];
if (l == 1)
return a == '#';
if (l >= 2)
return a == '#' || (a == '/'&& b == '/');
return false;
}
以下为调用方法,main主函数
int main()
{
ifstream infile("in.txt", std::ios::in);
string s;
string address, width, height;
int i = 0;
while (infile.good())
{
s.clear();
infile >> s;
if (infile.eof()) //注意这一行一定要有,否则下面会多执行一次
break;
if (s.empty())
continue;
if (!ifnote(s))
{
infile >> address >> width >> height;
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?