【C++】ini 读写

这段代码展示了如何将宽字符(WCHAR)字符串转换为多字节(LPSTR)字符串,并使用IniWriter类将时间戳写入配置文件。转换过程中涉及了`WideCharToMultiByte`函数,确保了双空字符结束,并在写入配置文件前处理了时间格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//Function that safely converts a 'WCHAR' String to 'LPSTR':
char* ConvertLPWSTRToLPSTR(LPWSTR lpwszStrIn)
{
	LPSTR pszOut = NULL;
	if (lpwszStrIn != NULL)
	{
		int nInputStrLen = wcslen(lpwszStrIn);



		// Double NULL Termination
		int nOutputStrLen = WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
		pszOut = new char[nOutputStrLen];

		if (pszOut)
		{
			memset(pszOut, 0x00, nOutputStrLen);
			WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);
		}
	}
	return pszOut;
}


        clearTime = iniReader.ReadString("Gloable", "lastClearTime", "2022-06-17 10:22:34");
		time_t t = StringToDatetime(clearTime);
		lastClearTime = CTime(t); //上次删除时间

		//方法1
		/*IniWriter iniWriter(".\\config.ini");
		time_t curT;
		time(&curT);
		struct tm* timeinfo;
		timeinfo = localtime(&curT);
		char buffer[80];
		strftime(buffer, 80, "%F %T", timeinfo);
		iniWriter.WriteString("Gloable", "lastClearTime", buffer);*/
		//方法2:
		//CTime tNowTime = CTime::GetCurrentTime();
		//tNowTime = tNowTime - CTimeSpan(fileNdays, 0, 0, 0); // 指向nDays天前的日期  1655169307
		//IniWriter iniWriter(".\\config.ini");

		//CString result = tNowTime.Format("%Y-%m-%d %H:%M:%S");
		// //USES_CONVERSION;
		// //LPCSTR wszTime = W2A(result);//while循环中不要使用

		//LPCSTR wszTime = ConvertLPWSTRToLPSTR(result.GetBuffer(result.GetLength()));//可在while循环中使用
		//result.ReleaseBuffer();
		//iniWriter.WriteString("Gloable", "lastClearTime", (LPSTR)wszTime);//(LPSTR)(LPCTSTR)result;

IniWriter.h

#ifndef INIFILE_INIWRITER_H
#define INIFILE_INIWRITER_H


class IniWriter
{
public:
    IniWriter(char* szFileName);
    void WriteInteger(char* szSection, char* szKey, int iValue);
    void WriteFloat(char* szSection, char* szKey, float fltValue);
    void WriteBoolean(char* szSection, char* szKey, bool bolValue);
    void WriteString(char* szSection, char* szKey, char* szValue);
private:
    char m_szFileName[255];
};


#endif

IniWriter.cpp

#include "IniWriter.h"
#include <iostream>
#include <Windows.h>
IniWriter::IniWriter(char* szFileName)
{
	memset(m_szFileName, 0x00, 255);
	memcpy(m_szFileName, szFileName, strlen(szFileName));
}
void IniWriter::WriteInteger(char* szSection, char* szKey, int iValue)
{
	char szValue[255];
	sprintf(szValue, "%d", iValue);
	WritePrivateProfileStringA(szSection, szKey, szValue, m_szFileName);
}
void IniWriter::WriteFloat(char* szSection, char* szKey, float fltValue)
{
	char szValue[255];
	sprintf(szValue, "%f", fltValue);
	WritePrivateProfileStringA(szSection, szKey, szValue, m_szFileName);
}
void IniWriter::WriteBoolean(char* szSection, char* szKey, bool bolValue)
{
	char szValue[255];
	sprintf(szValue, "%s", bolValue ? "True" : "False");
	WritePrivateProfileStringA(szSection, szKey, szValue, m_szFileName);
}
void IniWriter::WriteString(char* szSection, char* szKey, char* szValue)
{
	WritePrivateProfileStringA(szSection, szKey, szValue, m_szFileName);
}

参考:

慎用USES_CONVERSION 使用和注意_thanklife的专栏-程序员秘密 - 程序员秘密 (cxymm.net)icon-default.png?t=M4ADhttps://cxymm.net/article/thanklife/70208841

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值