// IniFile.cpp: implementation of the CIniReader class.
//
//
//#include "stdafx.h"
//#include "Readini.h"
#include "INI.h"
#include <afxcoll.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
// Used to retrieve a value give the section and key
CString CIniReader::getKeyValue(CString strKey,CString strSection)
{
char ac_Result[255];
// Get the info from the .ini file
m_lRetValue = GetPrivateProfileString((LPCTSTR)strSection,(LPCTSTR)strKey,
"",ac_Result, 255, (LPCTSTR)m_strFileName);
CString strResult(ac_Result);
return strResult;
}
// Used to add or set a key value pair to a section
long CIniReader::setKey(CString strValue, CString strKey, CString strSection)
{
m_lRetValue = WritePrivateProfileString (strSection, strKey,
strValue, m_strFileName);
return m_lRetValue;
}
// Used to find out if a given section exists
BOOL CIniReader::sectionExists(CString strSection)
{
char ac_Result[100];
CString csAux;
// Get the info from the .ini file
m_lRetValue = GetPrivateProfileString((LPCTSTR)strSection,NULL,
"",ac_Result, 90, (LPCTSTR)m_strFileName);
// Return if we could retrieve any info from that section
return (m_lRetValue > 0);
}
// Used to retrieve all of the section names in the ini file
CStringList* CIniReader::getSectionNames() //returns collection of section names
{
char ac_Result[2000];
m_sectionList->RemoveAll();
m_lRetValue = GetPrivateProfileSectionNames(ac_Result,2000,(LPCTSTR)m_strFileName);
CString strSectionName;
for(int i=0; i<m_lRetValue; i++)
{
if(ac_Result[i] != '\0') {
strSectionName = strSectionName + ac_Result[i];
} else {
if(strSectionName != "") {
m_sectionList->InsertAfter(m_sectionList->GetTailPosition(),strSectionName);
}
strSectionName = "";
}
}
return m_sectionList;
}
// Used to retrieve all key/value pairs of a given section.
CStringList* CIniReader::getSectionData(CString strSection)
{
char ac_Result[2000]; //change size depending on needs
m_sectionDataList->RemoveAll();
m_lRetValue = GetPrivateProfileSection((LPCTSTR)strSection, ac_Result, 2000, (LPCTSTR)m_strFileName);
CString strSectionData;
for(int i=0; i<m_lRetValue; i++)
{
if(ac_Result[i] != '\0') {
strSectionData = strSectionData + ac_Result[i];
} else {
if(strSectionData != "") {
m_sectionDataList->InsertAfter(m_sectionDataList->GetTailPosition(),strSectionData);
}
strSectionData = "";
}
}
return m_sectionDataList;
}
void CIniReader::setINIFileName(CString strINIFile)
{
m_strFileName = strINIFile;
}
BOOL CIniReader::fileExists()
{
LPCTSTR lpFilePath = m_strFileName;
WIN32_FIND_DATA wfd;
BOOL bRet;
HANDLE hFind;
hFind = FindFirstFile(lpFilePath, &wfd);
bRet = hFind != INVALID_HANDLE_VALUE;
FindClose(hFind);
return bRet;
}
// IniFile.h: interface for the CIniReader class.
//
//
#if !defined(AFX_INIFILE_H__99976B4B_DBA1_4D1E_AA14_CBEB63042FD1__INCLUDED_)
#define AFX_INIFILE_H__99976B4B_DBA1_4D1E_AA14_CBEB63042FD1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <afxcoll.h>
class CIniReader
{
public:
BOOL fileExists(void);//检查文件是否存在
// method to set INI file name, if not already specified
void setINIFileName(CString strINIFile);
// methods to return the lists of section data and section names
CStringList* getSectionData(CString strSection);
CStringList* getSectionNames();
// check if the section exists in the file
BOOL sectionExists(CString strSection);
// updates the key value, if key already exists, else creates a key-value pair
long setKey(CString strValue, CString strKey, CString strSection);
// give the key value for the specified key of a section
CString getKeyValue(CString strKey,CString strSection);
// default constructor
CIniReader()
{
m_sectionList = new CStringList();
m_sectionDataList = new CStringList();
}
CIniReader(CString strFile)
{
m_strFileName = strFile;
m_sectionList = new CStringList();
m_sectionDataList = new CStringList();
}
~CIniReader()
{
delete m_sectionList;
delete m_sectionDataList;
}
private:
// lists to keep sections and section data
CStringList *m_sectionDataList;
CStringList *m_sectionList;
CString m_strSection;
long m_lRetValue;
// ini file name
CString m_strFileName;
};
#endif // !defined(AFX_INIFILE_H__99976B4B_DBA1_4D1E_AA14_CBEB63042FD1__INCLUDED_)
#include "INI.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
CIniReader iniReader;
iniReader.setINIFileName(".\\parameter.ini");
if(iniReader.fileExists() != TRUE)
{
printf("the file parameter doesn't exist!");
return 0;
}
if ((iniReader.sectionExists("Parameter")) == TRUE )
{
UINT recTime;
UINT serachGapTime;
CString strRecTime;
CString strSerGapTime;
strRecTime = iniReader.getKeyValue("RecTime", "Parameter");
strSerGapTime = iniReader.getKeyValue("SerachGapTime", "Parameter");
recTime = atoi(strRecTime);
serachGapTime = atoi(strSerGapTime);
cout<<recTime<<endl;
cout<<strSerGapTime<<endl;
}
return 0;
}
ini文件的内容是这个
[Parameter]
;表示同一个任务下次生成与本次处理完后的间隔时间,单位为天
RecTime = 3
;表示检索hitrade数据库的间隔时间,以小时为单位
SerachGapTime = 1