文件服务器登录格式,服务器公共库开发--读取ini文件格式的类

2023-11-01

/********************************************************************

created:    2008/07/28

filename:     config.h

author:        Lichuang

purpose:    封装读取ini格式的配置文件操作

*********************************************************************/#include"config.h"#include"comdef.h"#include#includeCConfig::CConfig()

{

}

CConfig::CConfig(constchar*pFile)

: m_strFileName(pFile)

{

}

CConfig::CConfig(conststring&strFile)

: m_strFileName(strFile)

{

}

CConfig::~CConfig()

{

}intCConfig::Init(constchar*pFileName)

{

m_strFileName=pFileName;returnLoadFile();

}intCConfig::Init(conststring&strFileName)

{

m_strFileName=strFileName;returnLoadFile();

}intCConfig::Init()

{returnLoadFile();

}intCConfig::Dump()

{

map::iterator tSecIter1=m_mSec2Config.begin(), tSecIter2=m_mSec2Config.end();

ConfigType::iterator tConfigTypeIter1, tConfigTypeIter2;while(tSecIter1!=tSecIter2)

{

cout<first<

tConfigTypeIter1=tSecIter1->second.begin(), tConfigTypeIter2=tSecIter1->second.end();while(tConfigTypeIter1!=tConfigTypeIter2)

{

cout<first<second<

}

cout<

}return0;

}intCConfig::ReadItem(conststring&strSection,conststring&strKey,string&strValue)

{if(!m_mSec2Config.count(strSection))

{return-1;

}

ConfigType&tConfigType=m_mSec2Config[strSection];

strValue=tConfigType[strKey];return(strValue.empty())?-1:0;

}intCConfig::WriteItem(conststring&strSection,conststring&strKey,conststring&strValue)

{

ConfigType&tConfigType=m_mSec2Config[strSection];if(tConfigType.count(strKey))

{return-1;

}

tConfigType[strKey]=strValue;returnWriteFile();

}intCConfig::LoadFile()

{

FILE*pFile;if(NULL==(pFile=::fopen(m_strFileName.c_str(),"r")))

{return-1;

}stringstrLine, strSection;stringstrKey, strValue;

size_t nPos, nEndPos;

ConfigType tConfigType;while(0==ReadLine(pFile, strLine))

{if(string::npos!=(nPos=strLine.find_first_of("[")))

{if(string::npos==(nEndPos=strLine.find_first_of("]")))

{

::fclose(pFile);return-1;

}

strSection=strLine.substr(nPos+1, nEndPos-nPos-1);if(0>TrimString(strSection))

{

::fclose(pFile);return-1;

}

}elseif(string::npos!=(nPos=strLine.find_first_of("=")))

{

strKey=strLine.substr(0, nPos);

strValue=strLine.substr(nPos+1);if(0>TrimString(strKey)||0>TrimString(strValue)||strSection.empty())

{

::fclose(pFile);return-1;

}

m_mSec2Config[strSection][strKey]=strValue;

}

}return::fclose(pFile);

}intCConfig::WriteFile()

{

FILE*pFile;if(NULL==(pFile=::fopen(m_strFileName.c_str(),"w")))

{return-1;

}

map::iterator tSecIter1=m_mSec2Config.begin(), tSecIter2=m_mSec2Config.end();

ConfigType::iterator tConfigTypeIter1, tConfigTypeIter2;stringstrSection, strConfig;while(tSecIter1!=tSecIter2)

{

strSection=string("[")+tSecIter1->first+string("]\n");

::fwrite(strSection.c_str(),sizeof(char), strSection.length(), pFile);

tConfigTypeIter1=tSecIter1->second.begin(), tConfigTypeIter2=tSecIter1->second.end();while(tConfigTypeIter1!=tConfigTypeIter2)

{

strConfig=tConfigTypeIter1->first+string("=")+tConfigTypeIter1->second+string("\n");

::fwrite(strConfig.c_str(),sizeof(char), strConfig.length(), pFile);++tConfigTypeIter1;

}

::fwrite("\n",sizeof(char),1, pFile);++tSecIter1;

}return::fclose(pFile);

}intCConfig::ReadLine(FILE*pFile,string&strLine)

{charszBuff[BUFFER_LEN];intnLen;do{if(NULL==::fgets(szBuff, BUFFER_LEN, pFile))

{return-1;

}if(0

{break;

}

}while(true);

szBuff[nLen-1]='\0';

strLine=szBuff;return0;

}intCConfig::TrimString(string&strToken)

{if(strToken.empty())

{return-1;

}

size_t nPos=strToken.find_first_not_of("\t");

size_t nEndPos=strToken.find_last_not_of("\t");

strToken=strToken.substr(nPos, nEndPos-nPos+1);return(strToken.empty())?-1:0;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件服务器登录格式,服务器公共库开发--读取ini文件格式的类 的相关文章

随机推荐

  • go语言结构体与JSON序列化

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 易于人阅读和编写 同时也易于机器解析和生成 JSON键值对是用来保存JS对象的一种方式 键 值对组合中的键名写在前面并用双引号 包裹 使用冒号 分隔
  • Linux笔记_4(群组和文件目录属性)

    Linux笔记 4 标签 空格分隔 Linux 使用者与群组 1 在Linux里面 每个档案都有 Users Group Others 三种身份的权限 a 档案拥有者 b 群组 每个账号可以在多个群组中 c 其他人 2 预设情况下 系统上所
  • Word临时文件怎么恢复?可持续的文件恢复方法

    在word进行文档编辑时 有时候会发生误删除word文件的情况 这个时候word临时文件怎么恢复呢 其实word临时文件还存在于电脑中 本篇文章就来为大家讲解word临时文件怎么恢复 word临时文件在哪个文件夹 如果你在编辑文件时 没有手
  • STL迭代器简介

    标准模板库 The Standard Template Library STL 定义了五种迭代器 下面的图表画出了这几种 input output forward bidirectional random access 要注意 上面这图表并
  • 实现简易版——MyLinkedList

    class Node String val Node pre 双向 Node next Node String val this val val public class MyLinkedList private Node head 头结点
  • 视频号短视频创作需要注意的6个剪辑技巧(细节提高推荐率)

    昨天 老蒋有在 视频号短视频创作不能做的8件事情 文章中总结到我们在视频号创作短视频的时候几个不应该做的事情可能会导致账户被封 作品被限流的问题 继续接着这个话题 我们来聊一聊短视频需要注意的几个剪辑技巧 这些细节可能会提高用户的阅读体验
  • 频繁读写文件导致内存使用率过高

    最近接到一个客户反馈 说是服务器内存使用过高 总内存16G 使用top命令查看可用内存已经不足1G了 客户环境服务器为linux 部署了3个tomcat 每个tomcat均有大量的日志产生 让客户使用free m检查一下 此处有必要解释一下
  • 【IKE协商第二阶段快速模式协商过程】

    今天带大家了解一下IKE协商第二阶段快速模式协商过程 IKE协商第二阶段快速模式协商过程 第二阶段共产生3个交互报文 都是被第一阶段的ISAKMP IKE SA中的加密算法 验证算法所保护 IKE协商第二阶段的目的是产生最终用于加密和验证I
  • 常见DML语句汇总

    DML操作是指对数据中表记录的操作 主要包括表记录的插入 insert 更新 update 删除 delete 和查询 select 是开发人员日常使用最频繁的操作 下面依次对它们进行介绍 1 插入记录 INSERT INTO tablen
  • iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)

    WebDav的上传进度 import ViewController h interface ViewController
  • 实用的自然码双拼口诀

    今天给大家介绍一个实用的自然码双拼口诀 来无蛙双拼口诀 掌握自然码双拼输入法的难点是将其26个韵母对应的字母键位记忆到脑海中 比如 ai韵母对应于L键 an韵母对应于J键 假如你没记住对应关系 那么双拼输入也就无从谈起了 通过背诵双拼口诀
  • linux+eclipse+CDT 多线程编译问题

    linux eclipse CDT编译多线程程序 出现这样的问题 undefined reference to pthread create undefined reference to pthread join 原因是 pthread库不
  • Ubuntu9.04双网卡配置

    新手没怎么用过Ubuntu 所以走了不少弯路 网上找了很多方法 大都没对我起到帮助作用 所以把自己的配置方法写一写 环境 VPC2007SP1 Ubuntu9 04 Ubuntu上连了两块网卡 eth0为外网的eth1为内网的 VPC的特点
  • zabbix 配置企业微信告警群机器人告警

    一 企业微信端配置 1 创建微信群机器人 在需要接收告警信息的企业微信群上右键 注意群里成员至少要3人以上 选择 添加群机器人 设置机器人名称 系统自动生成此机器人的webhook地址 请记住该地址 不要随便给其他人 以免无关人员通过此地址
  • 基于RFID技术的智能仓储管理系统解决方案—铨顺宏

    一 行业背景 简单 静态的传统仓储管理模式普遍存的物资库存量巨大 物资跟踪困难 资金和物资周转效率较低 人力成本偏高 物流管理的信息和手段落后等缺点 已不能适应新的仓储管理需求 破除传统的仓储管理模式 积极探讨新的信息管理技术 在适应企业原
  • 转行学IT:零基础学什么技术好?

    最近在微博上看到一段话 他说 想要赚钱不惜命 IT是首选 我认为 如果真的对代码感兴趣 想赚钱 这个行业确实是个好的行业 而且现在经济形态不好 很多传统行业工作难找 工资也低 很多应届毕业生费尽心思找到的工作工资也少的可怜 转行学IT 零基
  • 基于光谱成像的柑橘黄龙病检测

    目录 前言 研究现状 室内检测 室外检测 移动地面传感器平台 多光谱 无人机 多光谱 讨论 参考文献 前言 柑橘黄龙病 又称绿化 是一种由病原菌介导的免疫疾病 因其危害性和快速传播的特点成为影响柑橘生长的最具破坏性的疾病 由于现阶段没有针对
  • 2023更新版大厂面经

    主要提供两个方向 一个是漏洞挖掘 一个是红队 面了之后 直观感受是 面试也是有套路可言的 这里的套路指的不是所谓的出题套路 而是涉及的技术栈 都是大同小益的 无非就是那么几样 java 域为主体 其他为辅助 虽然技术栈不变 但是面试的问题每
  • 国外11个高质量免费的3D素材网站-建筑设计/室内设计/效果图渲染

    Renderbus瑞云效果图云渲染小编小瑞又来给大家分享国内外效果图及云渲染行业的前沿资讯啦 今天给大家分享11个国外免费的3D素材网站 帮助建筑设计 室内设计 效果图渲染的小伙伴 在 Photoshop Revit Sketchup Au
  • 文件服务器登录格式,服务器公共库开发--读取ini文件格式的类

    created 2008 07 28 filename config h author Lichuang purpose 封装读取ini格式的配置文件操作 include config h include comdef h include