Inifile.h
- /*****************************************************************
- 文件名:读取当前目录下CIniFile类文件
- 日期:2004-1-18
- 作者:chao_jie
- E_Mail:chaojie2003@yahoo.com.cn
- 功能:系统提供的WriteProfileInt()等函数,写到注册表或
- 系统ini文件里,调用比较麻烦,而且会占用注册表资
- 源,下载了网上的ini类用起来又不太顺手,所以参照
- 写了一个读取当前目录下ini文件的类。程序有详细的
- 注释,欢迎批评指正。
- *****************************************************************/
- /*//
- 使用方法:
- 1.先把IniFile.h,IniFile.ccp加入Porject,在要使用该类的头文件中加入
- #include "IniFile.h",及CIniFile IniFile;
- 2.读取和写入:
- string = IniFile.GetString("section","item","默认");
- int = IniFile.GetInt("section","item",666);
- IniFile.SetString("section","item","设置值");
- IniFile.SetInt("section","item",666);
- 3.ini文件名及路径在初始化时,用SetFileName()设置
- 注意事项:ini文件如果太长,读取速度会变慢,可以使用多个ini文件
- //*/
- // IniFile.h: interface for the CIniFile class.
- //
- //
- #if !defined(AFX_INIFILE_H__33CAF5C6_7820_43EB_8D84_42CC1856C35C__INCLUDED_)
- #define AFX_INIFILE_H__33CAF5C6_7820_43EB_8D84_42CC1856C35C__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- class CIniFile
- {
- public:
- void SetFileName(CString FileName);
- void WriteFileString(CString Section, CString Item, CString Value);
- CString GetFileString(CString Section, CString Item, CString Value);
- CString GetString(CString Section, CString Item, CString Value);
- int GetInt(CString Section, CString Item, int Value);
- void SetString(CString Section, CString Item, CString Value);
- void SetInt(CString Section, CString Item, int Value);
- BOOL WriteIniFile();
- BOOL ReadIniFile();
- CIniFile();
- virtual ~CIniFile();
- //ini file
- CString m_sFileName;
- CStdioFile IniFile;
- BOOL bFileExist;
- CStringArray FileContainer;
- };
- #endif // !defined(AFX_INIFILE_H__33CAF5C6_7820_43EB_8D84_42CC1856C35C__INCLUDED_)
inifile.cpp
- // IniFile.cpp: implementation of the CIniFile class.
- //
- //
- #include "stdafx.h"
- #include "IniFile.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //
- // Construction/Destruction
- //
- CIniFile::CIniFile()
- {
- m_sFileName = "ini.ini";
- }
- CIniFile::~CIniFile()
- {
- if(FileContainer.GetSize() > 0)
- {
- FileContainer.RemoveAll();
- }
- }
- void CIniFile::SetFileName(CString FileName)
- {
- m_sFileName = FileName;
- }
- void CIniFile::SetInt(CString Section, CString Item, int Value)
- {
- CString strtemp;
- // strtemp.Format("%d",Value);
- //保存到FileContainer
- WriteFileString(Section, Item, strtemp);
- //保存到ini文件
- WriteIniFile();
- }
- void CIniFile::SetString(CString Section, CString Item, CString Value)
- {
- //保存到FileContainer
- WriteFileString(Section, Item, Value);
- //保存到ini文件
- WriteIniFile();
- }
- CString CIniFile::GetString(CString Section, CString Item, CString Value)
- {
- return GetFileString(Section, Item, Value);
- }
- int CIniFile::GetInt(CString Section, CString Item, CString Value)
- {
- CString strtemp;
- // strtemp.Format("%d",Value);
- // return atoi(GetFileString(Section, Item, strtemp));
- return GetFileString(Section, Item, strtemp);
- }
- BOOL CIniFile::ReadIniFile()
- {
- bFileExist=IniFile.Open(m_sFileName, CFile::modeRead);
- if(!bFileExist)
- {
- return FALSE;
- }
- CString strline;
- FileContainer.RemoveAll();
- //将IniFile文件数据读到FileContainer
- while(IniFile.ReadString(strline))
- {
- FileContainer.Add(strline);
- }
- IniFile.Close();
- return TRUE;
- }
- BOOL CIniFile::WriteIniFile()
- {
- bFileExist=IniFile.Open(m_sFileName, CFile::modeCreate | CFile::modeWrite);
- if(!bFileExist)
- return FALSE;
- CString strline;
- //将FileContainer写到IniFile文件
- for(int i = 0; i< FileContainer.GetSize(); i++)
- {
- strline = FileContainer[i];
- IniFile.WriteString(strline+"/n");
- }
- IniFile.Close();
- return bFileExist;
- }
- CString CIniFile::GetFileString(CString Section, CString Item, CString Value)
- {
- ReadIniFile();//打开文件
- if(bFileExist == FALSE || FileContainer.GetSize() < 0)
- return Value;//文件打开出错或文件为空,返回默认值
- int i = 0;
- int iFileLines = FileContainer.GetSize();
- CString strline,str;
- while(i<iFileLines)
- {
- strline = FileContainer.GetAt(i++);
- strline.TrimLeft();
- if(strline.GetAt(0)=='[')//查找Section,第一个必须为[
- {
- str=strline.Left(strline.Find("]"));//去掉]右边
- str=str.Right(str.GetLength()-str.Find("[")-1);//去掉[左边
- str.TrimLeft();
- str.TrimRight();
- if(Section == str)//找到Section
- {
- while(i<iFileLines)
- {
- strline = FileContainer.GetAt(i++);
- strline.TrimLeft();
- if(strline.GetAt(0)=='[')
- return Value;//如果到达下一个[],即找不到,返回默认值
- str = strline.Left(strline.Find("="));//去掉=右边
- str.TrimLeft();
- str.TrimRight();
- if(Item == str)//找到Item
- {
- str=strline.Right(strline.GetLength()-strline.Find("=")-1);//去掉=左边
- str.TrimLeft();
- str.TrimRight();
- return str;
- }
- }
- return Value;//找不到,返回默认值
- }
- }
- }
- return Value;//找不到,返回默认值
- }
- void CIniFile::WriteFileString(CString Section, CString Item, CString Value)
- {
- int i = 0;
- int iFileLines = FileContainer.GetSize();
- CString strline,str;
- while(i<iFileLines)
- {
- strline = FileContainer.GetAt(i++);
- strline.TrimLeft();
- if(strline.GetAt(0)=='[')//查找Section,第一个必须为[
- {
- str=strline.Left(strline.Find("]"));//去掉]右边
- str=str.Right(str.GetLength()-str.Find("[")-1);//去掉[左边
- str.TrimLeft();
- str.TrimRight();
- if(Section == str)//找到Section
- {
- while(i<iFileLines)
- {
- strline = FileContainer.GetAt(i++);
- strline.TrimLeft();
- if(strline.GetAt(0)=='[')//如果到达下一个[],即找不到Item
- {
- break;
- }
- str = strline.Left(strline.Find("="));//去掉=右边
- str.TrimLeft();
- str.TrimRight();
- if(Item == str)//找到Item
- {
- strline = Item + "=" + Value;
- FileContainer[i-1] = strline;
- return;
- }
- }
- //找不到Item
- strline = Item + "=" + Value;
- FileContainer.InsertAt(i-1, strline);
- return;
- }
- }
- }
- //找不到Section
- //直接在最后加入Section,Item,Value
- FileContainer.Add("[" + Section + "]");
- FileContainer.Add(Item + "=" + Value);
- return;
- }