IniFile.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "stdafx.h"
  2. #include "IniFile.h"
  3. #include "Utils.h"
  4. #include "Macro.h"
  5. #define TCS_STRINGBUFFER 2048
  6. #define TCS_KEYBUFFER 256 // This buffer length for store key value
  7. #define TCS_INTBUFFER 16 // This buffer length for store integer value
  8. /*
  9.  * namespace OnlineGameLib::Win32
  10.  */
  11. namespace OnlineGameLib {
  12. namespace Win32 {
  13. CIniFile::CIniFile()
  14. {
  15. memset( m_szFileName, 0, MAX_PATH );
  16. }
  17. CIniFile::CIniFile( LPCTSTR pFileName )
  18. {
  19. ASSERT( pFileName );
  20. strcpy( m_szFileName, pFileName );
  21. }
  22. CIniFile::~CIniFile()
  23. {
  24. }
  25. void CIniFile::SetFile( LPCTSTR pFileName )
  26. {
  27. ASSERT( pFileName );
  28. strcpy( m_szFileName, pFileName );
  29. }
  30. int  CIniFile::ReadInteger( LPCTSTR lpSectionName, LPCTSTR lpKeyName, int nDefault )
  31. {
  32. char szStr[TCS_KEYBUFFER];
  33. szStr[0] = 0;
  34. ReadString( lpSectionName, lpKeyName, szStr, TCS_KEYBUFFER, NULL );
  35. if( 0 != szStr[0] )
  36. {
  37. return atoi( szStr );
  38. }
  39. return nDefault;
  40. }
  41. BOOL CIniFile::WriteInteger( LPCTSTR lpSectionName, LPCTSTR lpKeyName, int nValue )
  42. {
  43. char szStrOut[TCS_INTBUFFER];
  44. wsprintf( szStrOut, "%d", nValue );
  45. return ::WritePrivateProfileString( lpSectionName, lpKeyName, szStrOut, m_szFileName );
  46. }
  47. DWORD CIniFile::ReadHexNum( LPCTSTR lpSectionName, LPCTSTR lpKeyName, DWORD dwDefault )
  48. {
  49. char szStr[TCS_KEYBUFFER];
  50. szStr[0] = 0;
  51. ReadString( lpSectionName, lpKeyName, szStr, TCS_KEYBUFFER, NULL );
  52. if( 0 != szStr[0] )
  53. {
  54. return HexStringToDWORD( reinterpret_cast< LPCTSTR >( szStr ) );
  55. }
  56. return dwDefault;
  57. }
  58. BOOL CIniFile::WriteHexNum( LPCTSTR lpSectionName, LPCTSTR lpKeyName, DWORD dwValue )
  59. {
  60. char szStrOut[TCS_INTBUFFER];
  61. wsprintf( szStrOut, "%8.8X", dwValue );
  62. return ::WritePrivateProfileString( lpSectionName, lpKeyName, szStrOut, m_szFileName );
  63. }
  64. DWORD CIniFile::ReadString( LPCTSTR lpSectionName, LPCTSTR lpKeyName, LPTSTR lpString, DWORD dwSize, LPCTSTR lpDefault )
  65. {
  66. ASSERT( lpSectionName && lpKeyName );
  67. return ::GetPrivateProfileString( lpSectionName, lpKeyName, lpDefault, lpString, dwSize, m_szFileName );
  68. }
  69. BOOL CIniFile::WriteString( LPCTSTR lpSectionName, LPCTSTR lpKeyName, LPCTSTR lpString )
  70. {
  71. ASSERT( lpSectionName && lpKeyName );
  72. return ::WritePrivateProfileString( lpSectionName, lpKeyName, lpString, m_szFileName );
  73. }
  74. BOOL CIniFile::ReadSections( _VETSTR& stdSections )
  75. {
  76. LPVOID pvData = NULL;
  77. HGLOBAL hGlobal = ::GlobalAlloc( GMEM_MOVEABLE, 16385 );
  78. ASSERT( hGlobal );
  79. pvData = ::GlobalLock( hGlobal );
  80. ASSERT( pvData );
  81. stdSections.clear();
  82. if ( ::GetPrivateProfileString( NULL, NULL, NULL, ( char * )pvData, 16384, m_szFileName ) )
  83. {
  84.         char *pSection = ( char * ) pvData;
  85.         while ( 0 != *pSection )
  86. {
  87. stdSections.push_back( pSection );
  88. pSection += strlen( pSection ) + 1;
  89. }
  90. }
  91. ::GlobalUnlock( hGlobal );
  92. ::GlobalFree( hGlobal );
  93. return ( BOOL )( stdSections.size() > 0 );
  94. }
  95. BOOL CIniFile::ReadSection( LPCTSTR lpSection, _VETSTR& stdKey )
  96. {
  97. LPVOID pvData = NULL;
  98. HGLOBAL hGlobal = ::GlobalAlloc( GMEM_MOVEABLE, 16385 );
  99. ASSERT( hGlobal );
  100. pvData = ::GlobalLock( hGlobal );
  101. ASSERT( pvData );
  102. stdKey.clear();
  103. if ( ::GetPrivateProfileString( lpSection, NULL, NULL, ( char * ) pvData, 16384, m_szFileName ) )
  104. {
  105.         char *pKey = ( char * )pvData;
  106.         while ( 0 != *pKey )
  107. {
  108. stdKey.push_back( pKey );
  109. pKey += strlen( pKey ) + 1;
  110. }
  111. }
  112. ::GlobalUnlock( hGlobal );
  113. ::GlobalFree( hGlobal );
  114. return ( BOOL )( stdKey.size() > 0 );
  115. }
  116. } // End of namespace OnlineGameLib
  117. } // End of namespace Win32