class ErrorCodeConfig{
public:
ErrorCodeConfig(){}
ErrorCodeConfig(const ErrorCodeConfig&)=delete;
ErrorCodeConfig &operator=(const ErrorCodeConfig&) = delete;
~ErrorCodeConfig(){}
bool FindErrorCodeStr(/*out*/string &strError,int error_code, int Module,string file_path);
private:
bool ReadMsgFromjson(string path);
string strErrorMsg_;
};
bool ErrorCodeConfig::ReadMsgFromjson(string path)
{
ifstream read_file(path.c_str(), ios::binary);
if (read_file.is_open()){
/*send_data = csv_data;*/
istream::pos_type current_pos1 = read_file.tellg();//记录下当前位置
read_file.seekg(, ios_base::end);//移动到文件尾
istream::pos_type file_size1 = read_file.tellg();//取得当前位置的指针长度->即文件长度
read_file.seekg(, ios_base::beg);//移动到原来的位置
if (file_size1 > )
{
char* data1 = new char[file_size1];
memset(data1, , file_size1);
read_file.read(data1, file_size1 * sizeof(char));
strErrorMsg_ =std::move(string(data1, file_size1));
read_file.close();
delete[] data1;
data1 = nullptr;
return true;
}
read_file.close();
}
return false;
}
bool ErrorCodeConfig::FindErrorCodeStr(string &strError, int error_code, int Module, string file_path)
{
if ( == strErrorMsg_.size())
{
if (!ReadMsgFromjson(file_path))
{
return false;
}
}
string str_err;
switch (Module)
{
case MODULE3:
str_err = "MODULE3" + std::to_string(error_code);
break;
case MODULE2:
str_err = "MODULE2" + std::to_string(error_code);
break;
case MODULE1:
str_err = "MODULE1" + std::to_string(error_code);
break;
default:
str_err = error_code;
break; }
string::size_type p = strErrorMsg_.find(str_err);
if (p == string::npos)
{
return false;
}
string::size_type maohao = strErrorMsg_.find(":", p);
if (maohao == string::npos)
{
return false;
}
string::size_type left_fen = strErrorMsg_.find("\"", maohao + );
if (left_fen == string::npos)
{
return false;
}
string::size_type right_fen = strErrorMsg_.find("\"", left_fen + );
if (right_fen == string::npos)
{
return false;
}
strError = strErrorMsg_.substr(left_fen + , right_fen - left_fen-);
if (==strError.size())
{
return false;
} //查找错误码大于一个的情况
string::size_type pos_last = right_fen;
string::size_type pos_now = string::npos;
while (-!=(pos_now = strErrorMsg_.find(str_err, pos_last)))
{
//此处阈值给100,防止error_1下面出现k_error_1,一行数据不会超过100字节
if (pos_now - pos_last > )
{
//走到此处也算找到错误码
return true;
} maohao = strErrorMsg_.find(":", pos_now);
if (maohao == string::npos)
{
return false;
}
left_fen = strErrorMsg_.find("\"", maohao + );
if (left_fen == string::npos)
{
return false;
}
right_fen = strErrorMsg_.find("\"", left_fen + );
if (right_fen == string::npos)
{
return false;
}
strError += strErrorMsg_.substr(left_fen + , right_fen - left_fen - );
pos_last = right_fen;
}
if ( == strError.size())
{
return false;
}
return true;
}

记录c++本地文件读取组装的更多相关文章

  1. 本地文件读取(csv,txt)时字符编码问题解决

    今天进行csv文件读取时,老是入库为空,因为其中有中文字符,我要通过中文字符映射成相应的编号(上升:1011,下降:1012),于是怎么也取不到编号.刚开始以为程序映射出了问题,最后日志打出来后,发现 ...

  2. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (下篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...

  3. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)

    Universal Windows Platform(UWP)是微软Windows10专用的通用应用平台,其目的在于在统一操作系统下控制所有智能电子设备. 自从Unity 5.2之后,配合VS 201 ...

  4. java写入内容到本地文件 -读取文件内容

    /** 日志记录 * @author sys * @param content 要写入的类容 * @param path 目标路径 c:/log/ * @param filename 文件名 log. ...

  5. 组合拳 | 本地文件包含漏洞+TFTP=Getshell

    文章声明 安全文章技术仅供参考,此文所提供的信息为漏洞靶场进行渗透,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作. 本文所提供的工具仅用于学习,禁止用于其他,未经授权,严禁转载,如需转 ...

  6. OC 将NSString写入本地文件

    最近在公司偶尔遇到一些不经常复现的bug,为了调试,只好把关键值记录到本地文件中,在遇到问题时,调出本地文件查看一下就可以很方便的知道是不是代码逻辑的错误或者问题考虑不够周全了. 废话不多说,流程在代 ...

  7. Spark保存到HDFS或本地文件相关问题

    spark中saveAsTextFile如何最终生成一个文件 http://www.lxway.com/641062624.htm 一般而言,saveAsTextFile会按照执行task的多少生成多 ...

  8. (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法

        在JSP中,页面链接是使用web路径的,但如果JavaBean要访问本地文件读取配置信息的话,是需要文件的本地路径的.如果你在写 Bean的时候直接将本地路径写进去,那网站的路径就不能变化,丧 ...

  9. HTML5 本地文件操作之FileSystemAPI简介

    一.FileSystemAPI简介 HTML5的文件操作Api中 1.FileAPI,用于基础的客户端本地文件读取,目前大多数接口已经被主流浏览器支持,点击查看更多参考 2.FileSystemAPI ...

随机推荐

  1. nextval 遍历ResultSet,行列要从1开始

    nextval nextval与序列关联,表示下一个,如:创建里一个序列seq_1:#序列一般表示第几行,起标识作用create sequence seq_1 increment by 1 start ...

  2. 撩课-Web大前端每天5道面试题-Day14

    1. 请写出至少5个html5新增的标签,并说明其语义和应用场景? section:定义文档中的一个章节; nav:定义只包含导航链接的章节; header:定义页面或章节的头部; 它经常包含 log ...

  3. JSP9大内置对象

    JSP9大内置对象 JSP9个内置对象:out对象 用于输出各种数据reuest对象 封装了来自客户端的各种信息response对象 封装了服务器的响应信息exception对象 封装了程序运行过程中 ...

  4. 最短路问题(dijkstral 算法)(优化待续)

    迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向 ...

  5. SqlServer之一些小问题

    如何用变量代替字段名? 将语句赋给一个varchar 变量,下列语句等价于(假设传进去的@id=’name‘):'select  name from 表名' 如果直接执行这个语句,是没用的.@id不会 ...

  6. 基于SSH框架下登录验证码模块的实现

    1.前端页面代码: 主要以jQuery的ajax异步请求实现. ... <script type="text/javascript" src="${pageCont ...

  7. 工厂方法模式(GOF23)

    耦合关系直接决定着软件面对变化时的行为 主要对模块之间的关系进行整理,依赖关系倒置(依赖反转),变化快的东西不能影响到变化慢的东西 用封装机制来隔离易变的对象,抽象部分(不易变)和细节部分(可能容易变 ...

  8. plSql读取Oracle数据库中文乱码

    新建环境变量,设置变量名:NLS_LANG,变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,确定即可

  9. VC+++ 操作word

    最近完成了一个使用VC++ 操作word生成扫描报告的功能,在这里将过程记录下来,开发环境为visual studio 2008 导入接口 首先在创建的MFC项目中引入word相关组件 右键点击 项目 ...

  10. canvas createPattern()方法详解

    createPattern作用 createPattern() 方法在指定的方向内重复指定的元素. 元素可以是图片.视频,或者其他 <canvas> 元素. 被重复的元素可用于绘制/填充矩 ...