DragonNest/Common/Utility/IniHelper.h
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

94 lines
No EOL
1.8 KiB
C++

#pragma once
class CIniHelper
{
private:
std::string m_fileName;
bool m_checked;
private:
bool CheckFile()
{
if ( m_checked )
return true;
// 파일이 존재하지 않으면 생성한다.
if( GetFileAttributesA(m_fileName.c_str()) == INVALID_FILE_ATTRIBUTES)
{
FILE *fp = fopen(m_fileName.c_str(), "ab");
if(fp)
{
m_checked = true;
fclose(fp);
return true;
}
else
return false;
}
else
{
m_checked = true;
return true;
}
return true;
}
public:
CIniHelper(const char* fileName = "")
{
SetFile(fileName);
}
void SetFile(const char* fileName)
{
m_checked = false;
m_fileName = fileName;
}
// Ini 파일에서 int 값을 읽어온다.
int Read(const char* app, const char* key, int defaultValue)
{
return GetPrivateProfileIntA(app, key, defaultValue, m_fileName.c_str());
}
// Ini 파일에서 문자열 값을 읽어온다.
std::string Read(const char* app, const char* key, const char* defaultValue)
{
char buf[2048] = {0,} ;
GetPrivateProfileStringA(app, key, defaultValue, buf, sizeof(buf), m_fileName.c_str());
return std::string(buf);
}
// Ini 파일에 int 값을 쓴다.
bool Write(const char* app, const char* key, int v)
{
if(!CheckFile())
return false;
char buf[2048] = {0,} ;
StringCbPrintfA(buf, sizeof(buf), "%d", v);
return WritePrivateProfileStringA(app, key, buf, m_fileName.c_str()) ? true : false;
}
// Ini 파일에 문자열 값을 쓴다.
bool Write(const char* app, const char* key, const char* v)
{
if(!CheckFile())
return false;
return WritePrivateProfileStringA(app, key, v, m_fileName.c_str()) ? true : false;
}
// Ini 파일에 기록한 내용을 파일에 실제로 쓴다
// 기록을 한 경우 반드시 호출해 준다.
bool Flush()
{
if(!CheckFile())
return false;
return WritePrivateProfileStringA(NULL, NULL, NULL, m_fileName.c_str()) ? true : false ;
}
};