1. 程式人生 > >CIniFile類,讀取INI檔案

CIniFile類,讀取INI檔案

2008年04月26日 星期六 上午 10:27/*==================================================================
= 檔名:CIniFile類定義檔案                                       =
= 主要功能:可以讀取.修改變數數值,可以設定新的組,新的變數          =
= 修改日期:2002-12-28                                             =
= 作者:阿皮                                                       =
= E_Mail:

[email protected] QQ:122281932                         =                            =
====================================================================*/
#ifndef _CINIFILE_H_
#define _CINIFILE_H_
//使用者介面說明:在成員函式SetVarStr和SetVarInt函式中,當iType等於零,則如果使用者制定的引數在ini檔案中不存在,
//則就寫入新的變數.當iType不等於零,則如果使用者制定的引數在ini檔案中不存在,就不寫入新的變數,而是直接返回FALSE;
class CIniFile
{
public:
CIniFile();
virtual ~CIniFile();
private:
CIniFile(const CIniFile &);
CIniFile & operator = (const CIniFile &);
public:
//建立函式
BOOL Create(const CString &strFileName);
//得到變數整數型數值
BOOL GetVarInt(const CString &,const CString & ,int &);
//得到變數字串型數值
BOOL GetVarStr(const CString &,const CString & ,CString & );
//重新設定變數整數型數值
BOOL SetVarInt(const CString &,const CString & ,const int &,const int iType = 1);
//重新設定變數字串型數值
BOOL SetVarStr(const CString &,const CString &, const CString &,const int iType = 1);

private:
BOOL GetVar(const CString &,const CString &,CString &);
BOOL SetVar(const CString &,const CString &,const CString &,const int iType = 1);
int SearchLine(const CString &,const CString &);

private:
// vector <CString> FileContainer;
CArray <CString,CString> FileContainer;
BOOL bFileExsit;
CStdioFile stfFile;
CString strInIFileName;

};

#endif

/*==================================================================
= 檔名:CIniFile類實現檔案                                       =
= 修改日期:2002-12-28                                             =
= 作者:阿皮                                                       =
=   E_Mail:[email protected] msn:[email protected]                                                              =
====================================================================*/
#include "stdafx.h"
#include "CIniFile.h"
CIniFile::CIniFile():bFileExsit(FALSE)
{
}
CIniFile::~CIniFile()
{
if(bFileExsit)
{
   if(stfFile.Open(strInIFileName,CFile::modeCreate | CFile::modeWrite) && FileContainer.GetSize() > 0)
   {
    CString strParam;
    for(int i = 0; i< FileContainer.GetSize();i++)
    {
     strParam = FileContainer[i];
    // stfFile.WriteString(strParam);
     stfFile.WriteString(strParam+"/n");
    }
   }
   stfFile.Close();
}
if(FileContainer.GetSize() > 0)
{
   FileContainer.RemoveAll();
}
}
BOOL CIniFile::Create(const CString & strFileName)
{
bFileExsit = FALSE;
strInIFileName = strFileName;
if(!stfFile.Open(strFileName,CFile::modeRead))
{
   return bFileExsit;
}
CString strFileLine;
while(bFileExsit = stfFile.ReadString(strFileLine))
{
   if(bFileExsit == FALSE)
    return bFileExsit;
   FileContainer.Add(strFileLine);
}
stfFile.Close();
bFileExsit = TRUE;
return bFileExsit;
}
BOOL CIniFile::GetVar(const CString & strSection,const CString & strVarName,CString &strReturnValue)
{
if(bFileExsit == FALSE || FileContainer.GetSize() < 0)
   return bFileExsit;

int iLine = SearchLine(strSection,strVarName);
if(iLine > 0)
{
 
   CString   strParam = FileContainer[iLine -1];
     strReturnValue = strParam.Mid(strParam.Find("=") + 1);
   return TRUE;
}
return FALSE;
}
BOOL CIniFile::GetVarStr(const CString & strSection,const CString & strVarName,CString &strReturnValue)
{
return(GetVar(strSection,strVarName,strReturnValue));
}
BOOL CIniFile::GetVarInt(const CString & strSection,const CString & strVarName,int & iValue)
{
CString strReturnVar;
if(GetVar(strSection,strVarName,strReturnVar))
{
   strReturnVar.TrimLeft();
   int iLen = strReturnVar.GetLength();
   iValue = atoi(strReturnVar.GetBuffer(iLen));
   return TRUE;
}
return TRUE;
}
BOOL CIniFile::SetVar(const CString & strSection,const CString & strVarName,const CString & strVar,const int iType)
{
if(bFileExsit == FALSE )
   return bFileExsit;
if(FileContainer.GetSize() == 0)
{
   FileContainer.Add("[" + strSection + "]");
   FileContainer.Add(strVarName + "=" + strVar);
   return TRUE;
}

int i = 0;
int iFileLines = FileContainer.GetSize();
//for(pInterator;pInterator != FileContainer.end();++pInterator)
//{
while(i< iFileLines)
{

   CString   strValue = FileContainer.GetAt(i++);
   strValue.TrimLeft();
   if((strValue.Find("[") >=0) && (strValue.Find(strSection) >=0))
   {
    while(i < iFileLines)
    {
  
     CString strSectionList = FileContainer[i++];
     strSectionList.TrimLeft();
     if(strSectionList.Find("//") >=0)//找到註釋行
      continue;
   
     if(strSectionList.Find(strVarName)>=0)//找到
     {
   
      CString strParam = strVarName + "=" + strVar;
    
      //FileContainer.SetAt(i-1,strParam);
      FileContainer[i-1] = strParam;

      return TRUE;
     }
     if(strSectionList.Find("[",0)>=0)//在原來檔案的SECTION中,沒有相應的變數需要新增而且,這種情況下,下邊還有別的section
     {
      //處理流程是這樣的,首先把當前的數值依次向後移動,然後在當前位置加入新出現的數值
      if(iType !=0)
       return FALSE;
      CString strParam;
      FileContainer.Add(strParam);
      int iPre = FileContainer.GetSize()-1;
      while(iPre >= i)
      {
       CString strBehind = FileContainer[iPre -1];
       FileContainer[iPre] = strBehind;
       iPre --;

      }//*/
      strParam = strVarName + "=" + strVar;
      FileContainer.SetAt(i-1,strParam);
      return TRUE;
     }
     if(i == iFileLines && iType == 0)
     {
      FileContainer.Add(strVarName + "=" + strVar);
      return TRUE;
     }
    }
   }
}
if(iType == 0)
{
   FileContainer.Add("[" + strSection + "]");
   FileContainer.Add(strVarName + "=" + strVar);
}

return TRUE;

}
BOOL CIniFile::SetVarStr(const CString & strSection,const CString & strVarName,const CString & strValue,const int iType)
{
return SetVar(strSection,strVarName,strValue,iType);
}
BOOL CIniFile::SetVarInt(const CString & strSection,const CString & strVarName,const int & iValue,const int iType)
{
CString strVar;
strVar.Format("%d",iValue);
return (SetVar(strSection,strVarName,strVar,iType));
}
int CIniFile::SearchLine(const CString & strSection,const CString & strVarName)
{

if(FileContainer.GetSize() > 0)
{
  
   int i = 0;
   int iFileLines = FileContainer.GetSize();
   while(i< iFileLines)
   {
  
    CString strValue = FileContainer[i++];
    strValue.TrimLeft();
    if(strValue.Find("[") >=0 && strValue.Find(strSection,1)>=0)
    {
     while(i < iFileLines)
     {
   
      CString strSectionList = FileContainer[i++];
      strSectionList.TrimLeft();
      if(strSectionList.Find("//") >=0)//找到註釋行
       continue;
      if(strSectionList.Find(strVarName)>=0)//找到
      {
       return i;
      }
      if(strSectionList.Find("[",0) >= 0)//另外一個段落出現,尋找失敗
      {
       return -2;
      }
    
     }
    }
   }
}
return -1;
}
 

相關推薦

CIniFile讀取INI檔案

2008年04月26日 星期六 上午 10:27/*=================================================================== 檔名:CIniFile類定義檔案                            

伺服器公共庫開發--讀取ini檔案格式的

/********************************************************************    created:    2008/07/28    filename:     config.h    author:        Lichuang       

Linux下讀取Ini檔案

#include "Ini.h" /****************************************************************************** * 功 能:建構函式 * 參 數:無 * 返回值:無 * 備 注: *********************

17.18.實現一個讀取INI檔案

開發環境: vs2013, win10 經過很多次修改,和對一些錯誤的學習,才搞定了這麼一個類: 比如說LPCTSTR的賦值,new和delete要成對出現,字元陣列和字串的庫函式去取代自己寫字串處理函式等, wcsncpy_s用法,string類的賦值運算子等。 標頭檔案

IDEA編寫wordcount讀取hdfs檔案執行在Spark叢集例子

前期:已安裝好hadoop叢集和spark叢集,hadoop2.6.5,spark2.3.1,jdk1.8. scala2.1.0 第一步:在idea編寫scala程式,並且要打包(pom檔案的build標籤中配置好maven打包程式碼,可以定義主類也可以在提交的時候再定義){補充:可以在s

改良昨天的指令碼讀取CSV檔案生成散點圖

需要讀取的CSV檔案,資料參考以下表頭順序 讀取成功後生成散點圖檔案 “散點圖.html" 開啟網頁檔案時,同目錄下需要有 echarts.min.js 散點圖效果:   程式碼如下: # -*- coding: utf-8 -*- """ 讀取cs

基於GDAL庫讀取.grd檔案(以海洋地形資料為例)C++版

技術背景   海洋地形資料主要是通過美國全球地形起伏資料(GMT)獲得,資料格式為grd(GSBG)二進位制資料,開啟軟體通過是Surfer軟體,surfer軟體可進行資料的編輯處理,以及進一步的視覺化表達等功能操作;由於Surfer軟體不支援二次開發,沒有提供相應的SDK供開發者進行使用,所以這一切只能通

通用工具獲取配置檔案資訊

創作不易,請勿抄襲,轉載請註明出處。如有疑問,請加微信 wx15151889890,謝謝。 [本文連結:]https://blog.csdn.net/wx740851326/article/details/83744404 之前已經寫過了這個文章,現在把整個類粘出來 文章也用markdo

Asp.net Core 和讀取配置檔案資訊

Asp.net Core 和類庫讀取配置檔案資訊 看乾貨請移步至.net core 讀取配置檔案公共類 首先開一個腦洞,Asp.net core 被使用這麼長時間了,但是關於配置檔案(json)的讀取,微軟官方似乎並沒有給出像.net framework讀取web.config那樣簡單且完美。嚴重懷

.NET CORE 讀取配置檔案繫結到

前言,好記性不如爛筆頭 1,NuGet管理器新增 三個引用Microsoft.Extensions.Configuration,Microsoft.Extensions.Configuration.Binder,Microsoft.Extensions.Configurat

java檔案操作 (1)——判別指定檔案是否存在讀取檔案修改時間和大小讀取文字檔案內容向文字檔案中寫入指定內容

任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某

Spark_Spark on YARN 提交配置檔案讀取配置檔案

Spark ON YARN 的官方文件,基於Spark 2.1.1 To use a custom log4j configuration for the application master or executors, here are the options

springboot 專案框架搭建(三):工具讀取配置檔案

一.原因     編寫一個服務類的工具類,想做成一個靈活的配置,各種唯一code想從配置檔案中讀取,便有了這個坑。  二.使用@value獲取值為null,     這是因為這個工具類沒有交給spring boot 來管理,導致每次都是new 一個新的,所以每次取出來的

基於GDAL庫讀取.nc檔案(以海洋表溫資料為例)

  對於做海洋資料處理的同學,會經常遇到nc格式的檔案,nc檔案的格式全稱是NetCDF,具體的詳細解釋請查詢官網【https://www.unidata.ucar.edu/software/netcdf/docs/index.html】,一般從全球大洋資料庫裡面下載的溫鹽、風場及雲量等資料,基本上是nc檔案

【node學習】koa2搭建簡單的伺服器讀取json檔案開啟圖表專案

需求:用koa2搭建一個簡單的伺服器,能夠讀取json檔案開啟echarts圖表專案。我們知道,不能直接開啟圖表檔案,可以使用hbuilder這種自帶內建伺服器的編輯器,或者vscode的live-server外掛開啟。如果不想在電腦上下載很多編輯器,可以手動用node搭建一個。 1.安裝k

c# 賬號密碼加密, 寫入讀取ini檔案

[DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBu

Java SE程式打包成jar包或exe程式時讀取配置檔案的處理

該Java SE程式打包成JAR包或exe程式的時候,配置檔案不能放在裡面;因為會時不時的修改配置檔案裡面的內容,所以必須放在外邊,以備隨時更改! Main main = new Main();

c語言實現讀取ini檔案操作

二、實現檔案 //ini.c #include "ini.h" #include <string.h> #include <stdio.h> content* pContent; char gfilename[255]; void iniGetInt(const char* lpSe

C#庫:ini檔案操作

C#類庫 ——ini檔案操作類 1.類庫介紹     在開發應用軟體時,ini檔案常用於軟體的相關配置,以下為ini檔案的相關結構及示例;ini檔案具有節(section)和鍵(key)兩個層級,節用”[]”包含,然後下一行為對應鍵名以及鍵值,

Java讀取ini檔案的值

IniFile iniFile=new BasicIniFile(); File f = new File(""); String cf = null; cf = f.getCanonicalPath(); File file=new File(c