分享
 
 
 

VC++ 操作 ini 文件

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

第一次写文章,不知道怎么上传附件, 只能把 代码贴上去了.

前几天要用到读写ini文件, 自己做了一个 ini 的类, 希望能供大家参考,

各个函数的作用我就不解释了,从名字上就可以看出来.

也希望大家用的时候如果发现错误请指正, 可以发mail 给我, miaoxf@126.com

// IniFile.h: interface for the CIniFile class.

//

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_INIFILE_H__3EF6D649_6870_480B_BA94_D135F75D8C2A__INCLUDED_)

#define AFX_INIFILE_H__3EF6D649_6870_480B_BA94_D135F75D8C2A__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

class CIniFile

{

public:

CString GetClassVersion();

DWORD IniFile_GetKeyNames(CString strSectionName, CStringArray &strArray);

UINT GetMaxSize_A_Section();

UINT GetMaxSize_All_SectionNames();

DWORD IniFile_GetKeyNamesValues(CString strSectionName,CStringArray &strArray);

BOOL IniFile_GetStruct(LPCTSTR lpSectionName,LPCTSTR lpKeyName,LPVOID lpStruct,UINT uSizeStruct);

DWORD IniFile_GetSectionNames(CStringArray &strArray );

BOOL IniFile_DeleteStruct(LPCTSTR lpSectionName, LPCTSTR lpKeyName);

BOOL IniFile_DeleteSection(CString strSectionName);

BOOL IniFile_DeleteString(CString strSectionName,CString strKeyName);

BOOL IniFile_ModifyString(LPCTSTR lpSectionName,LPCTSTR lpKeyName,LPCTSTR lpString);

BOOL IniFile_ModifyInt(LPCTSTR lpSectionName, LPCTSTR lpKeyName, int nValue);

BOOL IniFile_WriteStruct(LPCTSTR lpSectionName,LPCTSTR lpKeyName,LPVOID lpStruct,UINT uSizeStruct);

BOOL IniFile_WriteSection(LPCTSTR lpSectionName, LPCTSTR lpString);

BOOL IniFile_WriteLongString(LPCTSTR lpValue,LPCTSTR lpSectionName,LPCTSTR lpKeyName, ...);

BOOL IniFile_WriteString(LPCTSTR lpSectionName,LPCTSTR lpKeyName,LPCTSTR lpString);

BOOL IniFile_WriteInt(LPCTSTR lpSectionName, LPCTSTR lpKeyName, int nValue);

DWORD IniFile_GetString(CString strSectionName,CString strKeyName,CString strDefault,CString &strReturnedString);

DWORD IniFile_GetString(LPCTSTR lpSectionName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize);

UINT IniFile_GetInt(LPCTSTR lpSectionName,LPCTSTR lpKeyName,INT nDefault);

BOOL EnsureIniFileExist();

CString GetFilePathName();

void SetDefaultFilePathName();

BOOL SetFileName(LPCTSTR lpFileName);

void SetMaxSize_All_SectionNames(UINT nSize);

void SetMaxSize_A_Section(UINT nSize );

CIniFile();

virtual ~CIniFile();

protected:

BOOL IsIniFileExist();

void IniFile_InitializeForCreate();

DWORD IniFile_GetSectionNames(LPTSTR lpszReturnBuffer, DWORD nSize);

DWORD IniFile_GetSection(LPCTSTR lpSectionName,LPTSTR lpReturnedString, DWORD nSize);

private:

CString m_strFileFullName;

UINT nMaxSize_All_SectionNames;

UINT nMaxSize_A_Section;

};

#endif // !defined(AFX_INIFILE_H__3EF6D649_6870_480B_BA94_D135F75D8C2A__INCLUDED_)

// 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()

{

nMaxSize_All_SectionNames = 1024;

nMaxSize_A_Section = 1024;

SetDefaultFilePathName();

}

CIniFile::~CIniFile()

{

}

BOOL CIniFile::IsIniFileExist()

{

CFile MyFile;

if (!MyFile.Open(m_strFileFullName,CFile::modeRead))

return 0;

MyFile.Close();

return 1;

}

BOOL CIniFile::EnsureIniFileExist()

{

if (IsIniFileExist())

return 1;

CFile MyFile;

if (!MyFile.Open(m_strFileFullName,CFile::modeCreate))

return FALSE;

MyFile.Close();

IniFile_InitializeForCreate();

return TRUE;

}

void CIniFile::SetDefaultFilePathName()

{

TCHAR exeFullPath[MAX_PATH];

int len2 = GetModuleFileName(NULL,exeFullPath,MAX_PATH);

CString strDir(exeFullPath);

strDir.TrimLeft();

strDir.TrimRight();

CString strTemp = strDir.Left(strDir.GetLength() - 3);

strDir = strTemp;

strDir += _T("ini");

m_strFileFullName = strDir;

return;

}

BOOL CIniFile::IniFile_WriteString(LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

LPCTSTR lpString)

{

return WritePrivateProfileString(lpSectionName,

lpKeyName,

lpString,

m_strFileFullName);

}

BOOL CIniFile::IniFile_WriteInt(LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

int nValue)

{

CString strTemp;

strTemp.Format(_T("%d"),nValue);

return WritePrivateProfileString(lpSectionName,

lpKeyName,

strTemp,

m_strFileFullName);

}

UINT CIniFile::IniFile_GetInt(LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

INT nDefault)

{

return GetPrivateProfileInt(lpSectionName,

lpKeyName,

nDefault,

m_strFileFullName);

}

DWORD CIniFile::IniFile_GetString(LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

LPCTSTR lpDefault,

LPTSTR lpReturnedString,

DWORD nSize)

{

return GetPrivateProfileString(lpSectionName,

lpKeyName,

lpDefault,

lpReturnedString,

nSize,

m_strFileFullName);

}

DWORD CIniFile::IniFile_GetString(CString strSectionName,

CString strKeyName,

CString strDefault,

CString &strReturnedString)

{

char buf[256];

DWORD len = GetPrivateProfileString(strSectionName,

strKeyName,

strDefault,

buf,

256,

m_strFileFullName);

buf[len] = 0;

strReturnedString.Format("%s",buf);

return len;

}

CString CIniFile::GetFilePathName()

{

return m_strFileFullName;

}

BOOL CIniFile::IniFile_ModifyInt(LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

int nValue)

{

return IniFile_WriteInt(lpSectionName,lpKeyName,nValue);

}

BOOL CIniFile::IniFile_ModifyString(LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

LPCTSTR lpString)

{

return IniFile_WriteString(lpSectionName, lpKeyName, lpString);

}

BOOL CIniFile::IniFile_WriteLongString(LPCTSTR lpValue,

LPCTSTR lpSectionName,

LPCTSTR lpKeyName,

...)

{

// 此函数不允许键名和键值为空的

va_list pArgList;

LPCTSTR p;

if (lpValue == NULL ||

lpSectionName == NULL ||

lpKeyName == NULL)

return FALSE;

CString strSectionName(lpSectionName);

CString strKeyName(lpKeyName);

BOOL result = FALSE;

va_start(pArgList,lpKeyName); /* Initialize variable arguments. */

do {

p = va_arg(pArgList,LPCTSTR);

CString strTempValue1(p);

if (strTempValue1 == "ListEnd" ||

strTempValue1 == _T(""))

break;

if (!IniFile_WriteString(strSectionName,strKeyName,strTempValue1))

return FALSE;

p = va_arg(pArgList,LPCTSTR);

CString strTempValue2(p);

if (strTempValue2 == "ListEnd" ||

strTempValue2 == _T(""))

return FALSE;

strSectionName = strTempValue1;

strKeyName = strTempValue2;

} while(1);

va_end( pArgList ); /* Reset variable arguments. */

if (!IniFile_WriteString(strSectionName,strKeyName,lpValue))

return FALSE;

return TRUE;

}

BOOL CIniFile::IniFile_DeleteString(CString strSectionName, CString strKeyName)

{

return WritePrivateProfileString(strSectionName,strKeyName,NULL,m_strFileFullName);

}

BOOL CIniFile::IniFile_DeleteSection(CString strSectionName)

{

return WritePrivateProfileString(strSectionName,NULL,NULL,m_strFileFullName);

// return WritePrivateProfileSection(strSectionName,NULL,m_strFileFullName);

//这种方法会使 section 的标题一并删除

// return WritePrivateProfileSection(strSectionName,"",m_strFileFullName);

//这种方法会保留 section 的标题

}

BOOL CIniFile::IniFile_WriteSection(LPCTSTR lpSectionName, LPCTSTR lpString)

{

return WritePrivateProfileSection(lpSectionName,lpString,m_strFileFullName);

}

BOOL CIniFile::IniFile_WriteStruct(LPCTSTR lpSectionName,

LPCTSTR lpszKey,

LPVOID lpStruct,

UINT uSizeStruct)

{

return WritePrivateProfileStruct(lpSectionName,

lpszKey,

lpStruct,

uSizeStruct,

m_strFileFullName);

}

BOOL CIniFile::IniFile_DeleteStruct(LPCTSTR lpSectionName,

LPCTSTR lpszKey)

{

return WritePrivateProfileStruct(lpSectionName,lpszKey,NULL,1,m_strFileFullName);

}

BOOL CIniFile::SetFileName(LPCTSTR lpFileName)

{

if (!lpFileName)

return FALSE;

CString strFileName(lpFileName);

CString strPathName;

strFileName.TrimLeft();

strFileName.TrimRight();

if (strFileName.Find('\\') == -1)

{

TCHAR exeFullPath[MAX_PATH];

int len2 = GetModuleFileName(NULL,exeFullPath,MAX_PATH);

CString strDir(exeFullPath);

strDir.TrimLeft();

strDir.TrimRight();

int index = strDir.ReverseFind('\\');

strPathName = strDir.Left(index + 1) + strFileName;

}

else

strPathName = strFileName;

CString str;

if (strPathName.GetLength() > 4)

{

str = strPathName.Right(4);

str.MakeLower();

if (str == _T(".ini"))

{

m_strFileFullName = strPathName;

return TRUE;

}

}

strPathName += _T(".ini");

m_strFileFullName = strPathName;

return TRUE;

}

void CIniFile::IniFile_InitializeForCreate()

{

IniFile_WriteString("administrator","sa","sa\r\n");

IniFile_WriteString("user","abc","abc");

IniFile_WriteString("user","ab","ab\r\n");

}

DWORD CIniFile::IniFile_GetSectionNames(LPTSTR lpszReturnBuffer, DWORD nSize)

{

return GetPrivateProfileSectionNames(lpszReturnBuffer,nSize,m_strFileFullName);

}

DWORD CIniFile::IniFile_GetSectionNames(CStringArray &strArray)

{

char *sz = new char[nMaxSize_All_SectionNames];

DWORD dw = IniFile_GetSectionNames(sz,nMaxSize_All_SectionNames);

strArray.RemoveAll();

char * index = sz;

do {

CString str(index);

if (str.GetLength() < 1)

{

delete []sz;

return dw;

}

strArray.Add(str);

index = index + str.GetLength() + 1;

} while(index && (index < sz + nMaxSize_All_SectionNames));

delete []sz;

return dw;

}

BOOL CIniFile::IniFile_GetStruct(LPCTSTR lpSectionName,

LPCTSTR lpszKey,

LPVOID lpStruct,

UINT uSizeStruct)

{

return GetPrivateProfileStruct(lpSectionName,

lpszKey,

lpStruct,

uSizeStruct,

m_strFileFullName);

}

DWORD CIniFile::IniFile_GetSection(LPCTSTR lpSectionName,

LPTSTR lpReturnedString,

DWORD nSize)

{

return GetPrivateProfileSection(lpSectionName,

lpReturnedString,

nSize,

m_strFileFullName);

}

DWORD CIniFile::IniFile_GetKeyNamesValues(CString strSectionName, CStringArray &strArray)

{

char *sz = new char[nMaxSize_A_Section];

DWORD dw = IniFile_GetSection(strSectionName,sz,nMaxSize_A_Section);

char * index = sz;

CString strName,strValue;

int nPosition = -1;

while (index && (index < sz + dw))

{

CString str(index);

if (str.GetLength() < 1)

{

delete []sz;

return dw;

}

if ((nPosition = str.Find(_T('='))) == -1)

{

IniFile_DeleteString(strSectionName,str);

// continue;

}

else

{

strName = str.Left(nPosition);

strValue = str.Mid(nPosition + 1);

/*

if (strValue.GetLength() < 1)

{

IniFile_DeleteString(strSectionName,strName);

// continue;

}

*/

strArray.Add(strName);

strArray.Add(strValue);

}

index = index + str.GetLength() + 1;

}

delete []sz;

return dw;

}

void CIniFile::SetMaxSize_A_Section(UINT nSize)

{

nMaxSize_A_Section = nSize;

}

void CIniFile::SetMaxSize_All_SectionNames(UINT nSize)

{

nMaxSize_All_SectionNames = nSize;

}

UINT CIniFile::GetMaxSize_All_SectionNames()

{

return nMaxSize_All_SectionNames;

}

UINT CIniFile::GetMaxSize_A_Section()

{

return nMaxSize_A_Section;

}

DWORD CIniFile::IniFile_GetKeyNames(CString strSectionName, CStringArray &strArray)

{

char *sz = new char[nMaxSize_A_Section];

DWORD dw = IniFile_GetSection(strSectionName,sz,nMaxSize_A_Section);

char * index = sz;

CString strName,strValue;

int nPosition = -1;

while (index && (index < sz + dw))

{

CString str(index);

if (str.GetLength() < 1)

{

delete []sz;

return dw;

}

if ((nPosition = str.Find(_T('='))) == -1)

{

IniFile_DeleteString(strSectionName,str);

// continue;

}

else

{

strName = str.Left(nPosition);

}

strArray.Add(strName);

index = index + str.GetLength() + 1;

}

delete []sz;

return dw;

}

CString CIniFile::GetClassVersion()

{

return L"1.0.0.1";

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有