inifile.cpp

来自「3D赛车游戏源代码-用Visual Studio 2005」· C++ 代码 · 共 93 行

CPP
93
字号
#include "StdAfx.h"
#include "IniFile.h"

//-------------------------------------------------------------------------------
// 一些常数定义
//-------------------------------------------------------------------------------
#define MAX_SECTION     260     // Section最大长度
#define MAX_KEY         260     // KeyValues最大长度
#define MAX_ALLSECTIONS 256		// 所有Section的最大长度
#define MAX_ALLKEYS     256		// 所有KeyValue的最大长度


//-------------------------------------------------------------------------------
// 构造函数
//-------------------------------------------------------------------------------
CIniFile::CIniFile()
{
	// 初始化配置文件
	GetModuleFileName(NULL, m_szFileName, MAX_PATH);
	lstrcpy(m_szFileName + lstrlen(m_szFileName) - 4, ".ini");     
}

//-------------------------------------------------------------------------------
// 打开ini文件(设置路径)
//-------------------------------------------------------------------------------
bool CIniFile::Open(const char *filename)
{
	strncpy(m_szFileName, filename, sizeof(m_szFileName));

	// 检查文件是否存在
	DWORD  dwFlag = GetFileAttributes((LPCTSTR)m_szFileName);
	
	// 文件或者路径不存在,返回FALSE
	if (0xFFFFFFFF == dwFlag)
		return false;

	// 路径是目录,返回FALSE
	if (FILE_ATTRIBUTE_DIRECTORY & dwFlag)
		return false;

	return true;
}

//-------------------------------------------------------------------------------
// 检查section(节)是否存在
//-------------------------------------------------------------------------------
bool CIniFile::SectionExist(const char *section)
{
	char buffer[MAX_SECTION];

	DWORD ret = GetPrivateProfileString(section, NULL, "", buffer, 
		sizeof(buffer), m_szFileName);

	return ret > 0;
}

//-------------------------------------------------------------------------------
// 读取指定section下key的value(字符串)
//-------------------------------------------------------------------------------
const char * CIniFile::ReadString(const char *section, const char *key, const char *defaultvalue)
{
	static char key_buffer[MAX_KEY];

	DWORD ret = GetPrivateProfileString(section, key, defaultvalue, key_buffer, sizeof(key_buffer), m_szFileName);

	return key_buffer;
}

//-------------------------------------------------------------------------------
// 设置指定section下key的value(字符串),不存在则创建
//-------------------------------------------------------------------------------
bool CIniFile::WriteString(const char *section, const char *key, const char *value)
{
	return WritePrivateProfileString(section, key, value, m_szFileName) > 0;
}

//-------------------------------------------------------------------------------
// 删除指定section下的key及其value
//-------------------------------------------------------------------------------
bool CIniFile::DeleteKey(const char *section, const char *key)
{
	return WritePrivateProfileString(section, key, NULL, m_szFileName) > 0;
}

//-------------------------------------------------------------------------------
// 删除指定section及其所有的key及value
//-------------------------------------------------------------------------------
bool CIniFile::DeleteSection(const char *section)
{
	return WritePrivateProfileString(section, NULL, NULL, m_szFileName) > 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?