读写配置文件类CIniRW

1.头文件

#ifndef INIRW_H
#define INIRW_H

#pragma once

#include <atlstr.h>
#define DEFAULT_INI_PATH    _T(".\\setup.ini")

class CIniRW
{
public:
	CIniRW();
	CIniRW(LPCTSTR path);
	~CIniRW();

	LPCTSTR SetIniFilePath(LPCTSTR path);

	LPCTSTR ReadString(LPCTSTR sectionName, LPCTSTR keyName, LPCTSTR defaultValue=NULL);
	int		ReadInt(LPCTSTR sectionName, LPCTSTR keyName, const int defaultValue=0);
	int		ReadHex(LPCTSTR sectionName, LPCTSTR keyName, const int defaultValue=0x0);
	BOOL	ReadBool(LPCTSTR sectionName, LPCTSTR keyName, const BOOL defaultValue=FALSE);
	double	ReadDouble(LPCTSTR sectionName, LPCTSTR keyName, const double defaultValue=0.0);
	float	ReadFloat(LPCTSTR sectionName, LPCTSTR keyName, const float defaultValue=0.0);

	BOOL	WriteString(LPCTSTR sectionName, LPCTSTR keyName, LPCTSTR string);
	BOOL	WriteInt(LPCTSTR sectionName, LPCTSTR keyName, const int data);
	BOOL	WriteHex(LPCTSTR sectionName, LPCTSTR keyName, const int data, const int dataSize=2);
	BOOL	WriteBool(LPCTSTR sectionName, LPCTSTR keyName, const BOOL data);
	BOOL	WriteDouble(LPCTSTR sectionName, LPCTSTR keyName, const double data);
	BOOL	WriteFloat(LPCTSTR sectionName, LPCTSTR keyName, const float data);

	BOOL	DeleteSection(LPCTSTR sectionName);	
	BOOL	DeleteKey(LPCTSTR sectionName, LPCTSTR keyName);

protected:
	void	Init(void);
	
private:
	CString m_filePath;
};

#endif  /* INIRW_H */


2.源文件

#include "StdAfx.h"
#include "IniRW.h"


CIniRW::CIniRW()
{
	Init();
}

CIniRW::CIniRW(LPCTSTR path)
{
	Init();

	m_filePath = path;	
}

CIniRW::~CIniRW()
{
}

void CIniRW::Init(void)
{
	m_filePath = DEFAULT_INI_PATH;	
}

LPCTSTR CIniRW::SetIniFilePath(LPCTSTR path)
{	
	static CString oldPath = m_filePath;
	m_filePath = path;	
	return oldPath;
}

LPCTSTR CIniRW::ReadString(LPCTSTR sectionName, LPCTSTR keyName, LPCTSTR defaultValue/*=NULL*/)
{
    static CString temp;
	GetPrivateProfileString(sectionName, keyName, defaultValue, temp.GetBuffer(MAX_PATH), MAX_PATH, m_filePath);
	temp.ReleaseBuffer();
	return temp;	
}

int CIniRW::ReadInt(LPCTSTR sectionName, LPCTSTR keyName, const int defaultValue/*=0*/)
{
    return GetPrivateProfileInt(sectionName, keyName, defaultValue, m_filePath);	
}

int CIniRW::ReadHex(LPCTSTR sectionName, LPCTSTR keyName, const int defaultValue/*=0x0*/)
{
    return ReadInt(sectionName, keyName, defaultValue);	
}

BOOL CIniRW::ReadBool(LPCTSTR sectionName, LPCTSTR keyName, const BOOL defaultValue/*=FALSE*/)
{
	if (0 == ReadInt(sectionName, keyName, defaultValue))
	{
		return FALSE;
	}
	else
	{
		return TRUE;
	}
}

double CIniRW::ReadDouble(LPCTSTR sectionName, LPCTSTR keyName, const double defaultValue/*=0.0*/)
{
    CString temp;
	temp.Format(_T("%.lf"), defaultValue);

#if _MSC_VER <= 1200  // for VC6
	return atof(ReadString(sectionName, keyName, temp));	
#else
	return _ttof(ReadString(sectionName, keyName, temp));
#endif
}

float CIniRW::ReadFloat(LPCTSTR sectionName, LPCTSTR keyName, const float defaultValue/*=0.0*/)
{
    CString temp;
	temp.Format(_T("%.6lf"), defaultValue);

#if _MSC_VER <= 1200  // for VC6
	return (float)atof(ReadString(sectionName, keyName, temp));	
#else
	return (float)_ttof(ReadString(sectionName, keyName, temp));	
#endif
}

BOOL CIniRW::WriteString(LPCTSTR sectionName, LPCTSTR keyName, LPCTSTR string)
{
	return WritePrivateProfileString(sectionName, keyName, string, m_filePath);	
}

BOOL CIniRW::WriteInt(LPCTSTR sectionName, LPCTSTR keyName, const int data)
{
    CString temp;
	temp.Format(_T("%d"), data);
	return WriteString(sectionName, keyName, temp);	
}

BOOL CIniRW::WriteHex(LPCTSTR sectionName, LPCTSTR keyName, const int data, const int dataSize/*=2*/)
{
	CString temp;
	
	switch (dataSize)
	{
	case 1:
		temp.Format(_T("0x%02x"),data);
		break;
		
	case 2:
		temp.Format(_T("0x%04x"),data);
		break;
		
	case 4:
		temp.Format(_T("0x%08x"),data);
		break;
		
	default:
		temp.Format(_T("0x%x"),data);
		break;
	}
	
	return WriteString(sectionName, keyName, temp);		
}

BOOL CIniRW::WriteBool(LPCTSTR sectionName, LPCTSTR keyName, const BOOL data)
{
	return WriteInt(sectionName, keyName, data);		
}

BOOL CIniRW::WriteDouble(LPCTSTR sectionName, LPCTSTR keyName, const double data)
{
	CString temp;
	temp.Format(_T("%.8lf"), data);
	return WriteString(sectionName, keyName, temp);	
}

BOOL CIniRW::WriteFloat(LPCTSTR sectionName, LPCTSTR keyName, const float data)
{
	CString temp;
	temp.Format(_T("%.6lf"), data);
	return WriteString(sectionName, keyName, temp);	
}

BOOL CIniRW::DeleteSection(LPCTSTR sectionName)
{
	return WriteString(sectionName, NULL, NULL);	
}

BOOL CIniRW::DeleteKey(LPCTSTR sectionName, LPCTSTR keyName)
{
	return WriteString(sectionName, keyName, NULL);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

devilthelover

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值