📄 cprofile.cpp
字号:
if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
if( strWork != _T("0") ) EntryValue = true;
else EntryValue = false;
return true;
}
else
{
std::basic_string< TCHAR > strNewEntryValue;
if( EntryValue == true ) strNewEntryValue = _T("1");
else strNewEntryValue = _T("0");
return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
}
}
/*! エントリ値(int型)をProfileから読み込む,又はProfileへ書き込む
@param bRead [in] モード(true=読み込み, false=書き込み)
@param pszSectionName [in] セクション名
@param pszEntryKey [in] エントリ名
@param EntryValue [i/o] エントリ値
@retval true 成功
@retval false 失敗
@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
@date 2004-02-14 MIK _tstoi→_ttoi
*/
bool CProfile::IOProfileData(
const bool& bRead,
const TCHAR* pszSectionName,
const TCHAR* pszEntryKey,
int& EntryValue
)
{
// 「読み込み」か「書き込み」か
if( bRead )
{
std::basic_string< TCHAR > strWork;
if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
EntryValue = _ttoi( strWork.c_str() );
//std::basic_stringstream< TCHAR > stream;
//stream << strWork;
//stream >> EntryValue;
return true;
}
else
{
TCHAR szWork[32];
_itot( EntryValue, szWork, 10 );
std::basic_string< TCHAR > strNewEntryValue( szWork );
//std::basic_string< TCHAR > strNewEntryValue;
//std::basic_stringstream< TCHAR > stream;
//stream << EntryValue;
//stream >> strNewEntryValue;
return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
}
}
/*! エントリ値(WORD型)をProfileから読み込む,又はProfileへ書き込む
@param bRead [in] モード(true=読み込み, false=書き込み)
@param pszSectionName [in] セクション名
@param pszEntryKey [in] エントリ名
@param EntryValue [i/o] エントリ値
@retval true 成功
@retval false 失敗
@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
*/
bool CProfile::IOProfileData(
const bool& bRead,
const TCHAR* pszSectionName,
const TCHAR* pszEntryKey,
WORD& EntryValue
)
{
// 「読み込み」か「書き込み」か
if( bRead )
{
std::basic_string< TCHAR > strWork;
if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
EntryValue = _ttoi( strWork.c_str() );
//std::basic_stringstream< TCHAR > stream;
//stream << strWork;
//stream >> EntryValue;
return true;
}
else
{
TCHAR szWork[32];
_itot( EntryValue, szWork, 10 );
std::basic_string< TCHAR > strNewEntryValue( szWork );
//std::basic_string< TCHAR > strNewEntryValue;
//std::basic_stringstream< TCHAR > stream;
//stream << EntryValue;
//stream >> strNewEntryValue;
return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
}
}
/*! エントリ値(TCHAR型)をProfileから読み込む,又はProfileへ書き込む
@param bRead [in] モード(true=読み込み, false=書き込み)
@param pszSectionName [in] セクション名
@param pszEntryKey [in] エントリ名
@param EntryValue [i/o] エントリ値
@retval true 成功
@retval false 失敗
@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
*/
bool CProfile::IOProfileData(
const bool& bRead,
const TCHAR* pszSectionName,
const TCHAR* pszEntryKey,
TCHAR& EntryValue
)
{
// 「読み込み」か「書き込み」か
if( bRead )
{
std::basic_string< TCHAR > strWork;
if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
if( 0 == strWork.length() ) EntryValue = _T('\0');
else EntryValue = strWork.at(0);
return true;
}
else
{
std::basic_string< TCHAR > strNewEntryValue;
if( _T('\0') == EntryValue ) strNewEntryValue = _T("");
else strNewEntryValue = EntryValue;
return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
}
}
/*! エントリ値(NULL文字終端の文字列)をProfileから読み込む,又はProfileへ書き込む
@param bRead [in] モード(true=読み込み, false=書き込み)
@param pszSectionName [in] セクション名
@param pszEntryKey [in] エントリ名
@param pEntryValue [i/o] エントリ値
@param nEntryValueSize [in] pEntryValueの確保メモリサイズ(読み込み時サイズが十分であることが明確なら 0 指定可。書き込み時は使用しない)
@retval true 成功
@retval false 失敗
@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
*/
bool CProfile::IOProfileData(
const bool& bRead,
const TCHAR* pszSectionName,
const TCHAR* pszEntryKey,
TCHAR* pEntryValue,
const int& nEntryValueSize
)
{
// 「読み込み」か「書き込み」か
if( bRead )
{
std::basic_string< TCHAR > strWork;
if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
if( nEntryValueSize > static_cast<int>(strWork.length())
|| nEntryValueSize ==0 )
{
strWork.copy( pEntryValue, strWork.length() );
//copy()はNULL文字終端しないのでNULL文字追加
pEntryValue[strWork.length()] = _T('\0');
}
else
{
strWork.copy( pEntryValue, nEntryValueSize-1 );
//copy()はNULL文字終端しないのでNULL文字追加
pEntryValue[nEntryValueSize-1] = _T('\0');
}
return true;
}
else
{
return SetProfileData( pszSectionName, pszEntryKey, pEntryValue );
}
}
/*! エントリ値(std::basic_string<TCHAR>型)をProfileから読み込む,又はProfileへ書き込む
@param bRead [in] モード(true=読み込み, false=書き込み)
@param strSectionName [in] セクション名
@param strEntryKey [in] エントリ名
@param strEntryValue [i/o] エントリ値
@retval true 成功
@retval false 失敗
@date 2003-10-22 D.S.Koba 作成
*/
bool CProfile::IOProfileData(
const bool& bRead,
const std::basic_string< TCHAR >& strSectionName,
const std::basic_string< TCHAR >& strEntryKey,
std::basic_string< TCHAR >& strEntryValue
)
{
// 「読み込み」か「書き込み」か
if( bRead ) return GetProfileData( strSectionName, strEntryKey, strEntryValue );
else return SetProfileData( strSectionName, strEntryKey, strEntryValue );
}
/*! エントリ値をProfileから読み込む
@param strSectionName [in] セクション名
@param strEntryKey [in] エントリ名
@param strEntryValue [out] エントリ値
@retval true 成功
@retval false 失敗
@date 2003-10-22 D.S.Koba 作成
*/
bool CProfile::GetProfileData(
const std::basic_string< TCHAR >& strSectionName,
const std::basic_string< TCHAR >& strEntryKey,
std::basic_string< TCHAR >& strEntryValue
)
{
std::basic_string< TCHAR > strWork;
std::vector< Section >::iterator iter;
std::vector< Section >::iterator iterEnd = m_ProfileData.end();
MAP_STR_STR_ITER mapiter;
for( iter = m_ProfileData.begin(); iter != iterEnd; iter++ )
{
if( iter->strSectionName == strSectionName )
{
mapiter = iter->Data.find( strEntryKey );
if( iter->Data.end() != mapiter )
{
strEntryValue = mapiter->second;
return true;
}
}
}
return false;
}
/*! エントリをProfileへ書き込む
@param strSectionName [in] セクション名
@param strEntryKey [in] エントリ名
@param strEntryValue [in] エントリ値
@retval true 成功
@retval false 失敗(処理を入れていないのでfalseは返らない)
@date 2003-10-21 D.S.Koba 作成
*/
bool CProfile::SetProfileData(
const std::basic_string< TCHAR >& strSectionName,
const std::basic_string< TCHAR >& strEntryKey,
const std::basic_string< TCHAR >& strEntryValue
)
{
std::vector< Section >::iterator iter;
std::vector< Section >::iterator iterEnd = m_ProfileData.end();
MAP_STR_STR_ITER mapiter;
MAP_STR_STR_ITER mapiterEnd;
for( iter = m_ProfileData.begin(); iter != iterEnd; iter++ )
{
if( iter->strSectionName == strSectionName )
{
//既存のセクションの場合
mapiter = iter->Data.find( strEntryKey );
if( iter->Data.end() != mapiter )
{
//既存のエントリの場合は値を上書き
mapiter->second = strEntryValue;
break;
}
else
{
//既存のエントリが見つからない場合は追加
iter->Data.insert( PAIR_STR_STR( strEntryKey, strEntryValue ) );
break;
}
}
}
//既存のセクションではない場合,セクション及びエントリを追加
if( iterEnd == iter )
{
Section Buffer;
Buffer.strSectionName = strSectionName;
Buffer.Data.insert( PAIR_STR_STR( strEntryKey, strEntryValue ) );
m_ProfileData.push_back( Buffer );
}
return true;
}
void CProfile::DUMP( void )
{
#ifdef _DEBUG
std::vector< Section >::iterator iter;
std::vector< Section >::iterator iterEnd = m_ProfileData.end();
MAP_STR_STR_ITER mapiter;
MAP_STR_STR_ITER mapiterEnd;
MYTRACE( "\n\nCProfile::DUMP()======================" );
for( iter = m_ProfileData.begin(); iter != iterEnd; iter++ )
{
MYTRACE( "\n■strSectionName=%s", iter->strSectionName.c_str() );
mapiterEnd = iter->Data.end();
for( mapiter = iter->Data.begin(); mapiter != mapiterEnd; mapiter++ )
{
MYTRACE( "\"%s\" = \"%s\"\n", mapiter->first.c_str(), mapiter->second.c_str() );
}
}
MYTRACE( "========================================\n" );
#endif
return;
}
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -