/*==================================================================
= 文件名:CIniFile类实现文件 =
= 修改日期:2002-12-28 =
= 作者:阿皮 =
= E_Mail:peijikui@sd365.com msn:peijikui@sina.com =
====================================================================*/
#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;
}
没有合适的资源?快使用搜索试试~ 我知道了~
用于INI文件读取的CIniFile类
共7个文件
cpp:3个
h:2个
dsp:1个
5星 · 超过95%的资源 需积分: 9 28 下载量 78 浏览量
2008-05-12
22:55:33
上传
评论 1
收藏 5KB ZIP 举报
温馨提示
用于INI文件读取的CIniFile类
资源推荐
资源详情
资源评论
收起资源包目录
用于INI文件读取的CIniFile类 .zip (7个子文件)
CIniFile
main.cpp 115B
StdAfx.cpp 209B
CIniFile.cpp 5KB
CIniFile.dsp 4KB
StdAfx.h 1KB
CIniFile.dsw 539B
CIniFile.h 2KB
共 7 条
- 1
资源评论
- yyxhhx2011-10-15最好带个DEmo,没有说明不,研究起来慢的很啊
- 小熊夫人2012-06-15不错的类,可以直接拿来调用,方便很多
- lxf25802011-12-01/*把Mani.cpp的代码用下面的代码覆盖就可以了,接口参数在类文件里说的很清楚。 很好用的类,可以使用。*/ #include "stdafx.h" #include "CIniFile.h" #include <iostream> using namespace std; int main() { cout << "a\n"; CIniFile iniFile; iniFile.Create ("a.ini"); iniFile.SetVarStr ("Section
珍妮邦德
- 粉丝: 4
- 资源: 70
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功