亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

c++實現逐行讀取配置文件寫入內存的示例

2020-01-26 15:31:01
字體:
來源:轉載
供稿:網友

不解析配置內容,只讀取文件內容,剪去注釋和首尾空格后寫入緩存: vector<string> 中。供其他方法使用。
代碼是在做一個MFC小工具時寫的。

ReadProtocol.h

復制代碼 代碼如下:

/**
* 從文件中 讀取 protocol 的內容 寫入緩存
* 供外部方法使用
* Alex Liu, 2014
*/

#pragma once


#include <vector>
#include <map>
#include <list>
#include <string>

using namespace std;


#define MAX_FILEPATH 512

#define COMMENT_FLG '#'
#define SECTION_BEGIN_FLG '['
#define SECTION_END_FLG  ']'

class ReadProtocol {
public:
 ReadProtocol(char* FilePath);
 ~ReadProtocol();

 /**
 * 返回值為 errMsg 的地址 為了方便鏈式調用
 * 缺省返回 "成功"
 */
 char* GetErrInfo(char* errMsg, int errNo = 0);
 /**
 * 逐行讀取文件內容 寫入 m_StrVect
 * 使用 vector::push_back() 寫入
 * return 0 成功 < 0 失敗 可根據返回值 GetErrInfo
 */
 int ReadIniFile();

 /**
 * 獲取根據目錄獲取一個
 * 使用 vector::push_back() 寫入
 * return 0 成功 < 0 失敗 可根據返回值 GetErrInfo
 */
 int GetOneSection(string Section, list<string> &Protocol);

private:
 void PushBackToVector(string oneLine);

private:
 char m_IniFile[MAX_FILEPATH];
 string m_ErrPos;

 map<string, unsigned int> m_SectionMap;
 vector<string> m_StrVect;
};

ReadProtocol.cpp

復制代碼 代碼如下:

//

//#include "stdafx.h"
#include <fstream>

#include "ReadProtocol.h"

//去掉字符串首尾的空格
static string strTrim(string aStr)
{
    string s = aStr;
    unsigned int first, last;
    if (string::npos != (first = s.find_first_not_of(' ') ))
        s = s.substr(first, s.length()-first);
    if (string::npos != (last = s.find_last_not_of(' ') ))
        s = s.substr(0, last+1);
    return s;
}

///=====================================================================================

ReadProtocol::ReadProtocol(char* FilePath)
{
 int iLen = (strlen(FilePath) > MAX_FILEPATH) ? MAX_FILEPATH : strlen(FilePath);
 memset(m_IniFile, 0, MAX_FILEPATH);
 memcpy(m_IniFile, FilePath, iLen);
}

ReadProtocol::~ReadProtocol()
{
 m_SectionMap.clear();
 m_StrVect.clear();
}

int ReadProtocol::GetOneSection(string Section, list<string> &Protocol)
{
 unsigned int Start = 0;
 // 注意這里不能使用 [] 運算符
 map<string, unsigned int>::iterator itr = m_SectionMap.find(Section);
 if (m_SectionMap.end() == itr)
 {
  m_ErrPos = Section;
  return -5;   // Unknown Section!!
 }
 else
 {
  Start = itr->second;
 }


 vector<string>::iterator it = m_StrVect.begin() + Start + 1;
 for (; it!=m_StrVect.end(); ++it)
 {
  unsigned int First, Last;
  First = it->find_first_of ( SECTION_BEGIN_FLG );
  Last = it->find_last_of ( SECTION_END_FLG );
  // stop when the next Section
  if( string::npos != First && string::npos != Last)
  {
   break;
  }

  Protocol.push_back(*it);
 }
 return (int)Protocol.size();
}

int ReadProtocol::ReadIniFile()
{
 ifstream fin(m_IniFile);
 if (!fin.is_open())
 {
  return -1; //can'topen file
 }
 string strLine;
 unsigned int Last;

 while (std::getline(fin, strLine).good())
 {
  if ( string::npos !=(Last = strLine.find_last_not_of('/r') ))
  {
   //delete /r
   strLine = strLine.substr(0, Last + 1);
  }
  PushBackToVector(strLine);
 }
 fin.close();

 if (m_StrVect.empty())
 {
  return -2; //get noting from file
 }
 return 0;
}

void ReadProtocol::PushBackToVector(string oneLine)
{
 unsigned int uPos;
 //去掉行尾注釋
 if ( string::npos != (uPos = oneLine.find_first_of( COMMENT_FLG ) ) )
 {
  oneLine = oneLine.substr(0, uPos + 1);
 }
 //去首尾空格
 oneLine = strTrim(oneLine);
 if (oneLine.empty() || oneLine.length() < 2) return;

 //一行只能有一條記錄
 unsigned int First, Last;
 First = oneLine.find_first_of(SECTION_BEGIN_FLG);
 Last = oneLine.find_last_of(SECTION_END_FLG);
 // is Section
 if( string::npos != First && string::npos != Last)
 {
  m_SectionMap[ oneLine.substr(First + 1, Last - First - 1) ] = m_StrVect.size();
 }
 m_StrVect.push_back(oneLine);
}

char* ReadProtocol::GetErrInfo(char* errMsg, int errNo)
{
 string errInfo;
 switch (errNo)
 {
 case 0:
  {
   errInfo = "Success!";
   break;
  }
 case -1:
  {
   char Path[1024] = {0};
   int pLength = 1024;
   GetCurrentDirectory(pLength, Path);
   errInfo.append("Can't open file. The file name is:==>/"");
   errInfo.append( m_IniFile);
   errInfo.append("/"/r/nMaybe no such file in Path:");
   errInfo.append(Path);
   break;
  }
 case -2:
  {
   errInfo = "Get noting from file: ";
   errInfo.append(m_IniFile);
   break;
  }
 case -3:
  {
   errInfo = "Analyze file failed. In ==> ";
   errInfo.append(m_ErrPos);
   break;
  }
 case -5:
  {
   errInfo = "/r/nUnknown Section!! ==> /"[";
   errInfo.append(m_ErrPos);
   errInfo.append("]/"/r/n請檢查配置文件中是否有遺漏。");
   break;
  }
 default:
  {
   errInfo = "請按照正確步驟使用";
  }
 }
 memcpy(errMsg, errInfo.c_str(), errInfo.length());
 return errMsg;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区xxx视频| 日韩成人网免费视频| 欧美性xxxx18| 97婷婷涩涩精品一区| 国产小视频国产精品| 国产精品久久综合av爱欲tv| 国产精品久久久久久久一区探花| 日韩精品免费看| 欧美一级片在线播放| 日韩欧美aⅴ综合网站发布| 欧美大片大片在线播放| 欧美高清第一页| 久久综合久久88| 国产精品久久色| 日韩成人免费视频| 日韩有码在线电影| 91精品在线播放| 久热国产精品视频| 日韩欧美亚洲范冰冰与中字| 国内自拍欧美激情| xx视频.9999.com| 91久久精品视频| 国产精品a久久久久久| 亚洲国产第一页| 欧美日韩国产限制| 91精品国产成人www| 国产欧美日韩精品在线观看| 日韩av中文字幕在线免费观看| 国内免费精品永久在线视频| 日韩欧美国产视频| 亚洲男人天天操| 91香蕉嫩草影院入口| 亚洲综合自拍一区| 91免费观看网站| 亚洲女人天堂色在线7777| 国产精品久久久久av免费| 红桃视频成人在线观看| 国产精品女人久久久久久| 日韩欧美在线视频| 国产99久久精品一区二区永久免费| 日韩专区在线观看| 在线播放日韩专区| 2019av中文字幕| 菠萝蜜影院一区二区免费| 97免费视频在线| 欧美一乱一性一交一视频| 美女久久久久久久久久久| 国产日韩欧美日韩大片| 一本色道久久88亚洲综合88| 欧美性猛交xxxxx免费看| 久久久久久尹人网香蕉| 日韩中文字幕在线播放| 亚洲日本中文字幕免费在线不卡| 亚洲综合精品伊人久久| 日本欧美精品在线| 国产精品久久久久久一区二区| 国产福利成人在线| 九九热精品视频在线播放| 久久天天躁夜夜躁狠狠躁2022| 懂色av中文一区二区三区天美| 国产成人亚洲综合91精品| 欧美中文字幕在线视频| 精品国产一区二区三区久久久| 久久成人精品视频| 国产精品极品在线| 国产日韩视频在线观看| 久久69精品久久久久久国产越南| 色系列之999| 美日韩精品视频免费看| 国产suv精品一区二区三区88区| 久久精品国产亚洲7777| 亚洲第一视频网站| 亚洲毛片在线看| 一区二区三区美女xx视频| 欧美成人在线影院| 成人精品在线观看| 国产精品自产拍在线观看| 精品国产一区二区三区在线观看| 国产精品久久久久77777| 国产美女扒开尿口久久久| 日韩亚洲成人av在线| 日韩av中文字幕在线播放| 久久躁日日躁aaaaxxxx| 亚洲国产精久久久久久| 久久露脸国产精品| 欧美第一黄色网| 久久久久久久久久国产| 国产不卡精品视男人的天堂| 97精品在线视频| 国产精品欧美一区二区三区奶水| 国产精品99久久久久久久久| 色综合导航网站| 亚洲成人激情在线观看| 久久精品福利视频| 国产91在线高潮白浆在线观看| 亚洲国产精品推荐| 在线观看欧美日韩国产| 国产亚洲精品久久久久久777| 色一情一乱一区二区| 国产亚洲免费的视频看| 国产精品欧美一区二区三区奶水| 国产精品自产拍在线观看中文| 中文字幕久久亚洲| 亚洲第一精品夜夜躁人人躁| 久久久电影免费观看完整版| 午夜精品久久久久久久99热浪潮| 91欧美精品午夜性色福利在线| 日韩精品视频在线播放| 亚洲一区二区三区xxx视频| 国产精品嫩草影院久久久| 91美女片黄在线观看游戏| 亚洲高清福利视频| 大量国产精品视频| 欧美麻豆久久久久久中文| 96pao国产成视频永久免费| 欧美性高跟鞋xxxxhd| 欧美午夜激情在线| 成人黄色短视频在线观看| 亚洲自拍偷拍色图| 日韩激情视频在线| 成人美女免费网站视频| 按摩亚洲人久久| 国产午夜精品一区理论片飘花| 青青久久av北条麻妃海外网| 国产精品久久久久av| 久久久久久有精品国产| 午夜精品一区二区三区在线| 欧美激情乱人伦一区| 北条麻妃久久精品| 日韩欧美亚洲国产一区| 亚洲欧美激情一区| 国产精品丝袜高跟| 国产精品成人av在线| 亚洲国产精品高清久久久| 色哟哟网站入口亚洲精品| 国产精品老牛影院在线观看| 欧美在线影院在线视频| 欧美亚洲视频在线看网址| 欧美日韩激情小视频| 久久久久久久影视| 国产成人91久久精品| 亚洲欧美日韩第一区| 亲爱的老师9免费观看全集电视剧| 欧美不卡视频一区发布| 亚洲风情亚aⅴ在线发布| 韩国19禁主播vip福利视频| 亚洲a在线观看| 欧美成人四级hd版| 国产在线不卡精品| 欧美在线视频a| 亚洲欧美日本另类| 日韩在线视频线视频免费网站| 91精品中国老女人| 亚洲女人天堂色在线7777| 欧美日韩激情视频| 久久久久久中文字幕| 成人做爰www免费看视频网站| 国产一区二区三区在线| 亚洲精品美女视频| 成人精品视频在线| 亚洲国产一区二区三区四区| 91精品久久久久久久久青青| 久久大大胆人体| 国产成人极品视频|