C++配置文件读写工具封装

使用单例模式实现配置文件读写,且具有线程安全性。

#include<iostream>
#include <windows.h>
#include<fstream>

using namespace std;

//Ty 使用单例模式实现配置文件的读写,具有线程安全的特性
//2021.03.17

CRITICAL_SECTION cs;

class CIniFileTool
{
private:
	CIniFileTool()
	{
		InitializeCriticalSection(&cs);
	}
	
	~CIniFileTool()
	{
		DeleteCriticalSection(&cs);
	}
	
	//检测文件是否存在
	bool bExistIniFile(const char *pStrFilename)
	{		
		std::fstream _file;
		_file.open(pStrFilename, ios::in);
		bool ret = false;
		if (_file)
		{
			ret = true;
		}
		_file.close();
		return ret;

	}

public:
	//获取唯一实例
	static CIniFileTool &GetIniFileTool()
	{
		static CIniFileTool  m_tool;
		return m_tool;
	}
	
	//向配置文件写数据
	bool WriteIniFile(const char *m_pIniFileName,const char *m_rootkey,const char *strKey,const char *strValue_In)
	{
		if (!m_pIniFileName || !strKey || !m_rootkey || !strValue_In)
		{
			return false;
		}

		if (!bExistIniFile(m_pIniFileName))
		{
			return false;
		}

		try
		{
			EnterCriticalSection(&cs);
			bool ret = WritePrivateProfileString(m_rootkey, strKey, strValue_In, m_pIniFileName);
			LeaveCriticalSection(&cs);
			return  ret;
		}
		catch (...)
		{
		LeaveCriticalSection(&cs);
			return false;
		}

		return true;
	}

	//从配置文件读数据
	bool ReadIniFile(const char *m_pIniFileName, const char *m_rootkey, const char *strKey, char * strValue_Out,int noutsize)
	{
		if (!m_pIniFileName || !strKey || !strKey || !strValue_Out)
		{
			return false;
		}
		if (!bExistIniFile(m_pIniFileName))
		{
			return false;
		}

		try
		{
			EnterCriticalSection(&cs);
			int n = GetPrivateProfileString(m_rootkey, strKey,"error", strValue_Out, noutsize, m_pIniFileName);
			LeaveCriticalSection(&cs);
			if (n < 0)
			{
				return false;
			}

		}
		catch (...)
		{
		LeaveCriticalSection(&cs);
			return false;
		}

		return true;
	}
};

void play()
{
	CIniFileTool &s = CIniFileTool::GetIniFileTool();

	char buf[24] = { 0 };
	bool ret = s.ReadIniFile("C:\\Users\\t04601\\Desktop\\1.ini", "test", "la", buf, 24);
	if (ret)
	{
		cout << buf << endl;
	}
	else
	{
		cout << "配置文件读取失败!\n";
	}

	ret = s.WriteIniFile("C:\\Users\\t04601\\Desktop\\1.ini", "test", "la", "My name is Ty");
	if (ret)
	{
		cout << "配置文件写入成功!\n";
	}
	else
	{
		cout << "配置文件写入失败!\n";
	}

}

void main()
{
	play();	
	system("pause");
}

结果:
程序运行之前
在这里插入图片描述
在这里插入图片描述
程序运行之后:
在这里插入图片描述
下载源码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发如雪-ty

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

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

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

打赏作者

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

抵扣说明:

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

余额充值