inifile.cpp
上传用户:chn_coc
上传日期:2007-12-20
资源大小:563k
文件大小:4k
源码类别:

P2P编程

开发平台:

Windows_Unix

  1. // ------------------------------------------------
  2. // File : inifile.cpp
  3. // Date: 4-apr-2002
  4. // Author: giles
  5. // Desc: 
  6. // .INI file reading/writing class
  7. //
  8. // (c) 2002 peercast.org
  9. // ------------------------------------------------
  10. // This program is free software; you can redistribute it and/or modify
  11. // it under the terms of the GNU General Public License as published by
  12. // the Free Software Foundation; either version 2 of the License, or
  13. // (at your option) any later version.
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. // GNU General Public License for more details.
  18. // ------------------------------------------------
  19. #include <stdlib.h>
  20. #include "inifile.h"
  21. #include "sys.h"
  22. void openReadOnly(const char *);
  23. void openWriteReplace(const char *);
  24. // -----------------------------------------
  25. bool IniFile::openReadOnly(const char *fn)
  26. {
  27. try 
  28. {
  29. fStream.openReadOnly(fn);
  30. }catch(StreamException &)
  31. {
  32. return false;
  33. }
  34. return true;
  35. }
  36. // -----------------------------------------
  37. bool IniFile::openWriteReplace(const char *fn)
  38. {
  39. try 
  40. {
  41. fStream.openWriteReplace(fn);
  42. #if defined(_LINUX) || defined(__APPLE__)
  43. fStream.writeCRLF = false;
  44. #endif
  45. }catch(StreamException &)
  46. {
  47. return false;
  48. }
  49. return true;
  50. }
  51. // -----------------------------------------
  52. void IniFile::close()
  53. {
  54. fStream.close();
  55. }
  56. // -----------------------------------------
  57. bool IniFile::readNext()
  58. {
  59. if (fStream.eof())
  60. return false;
  61. try
  62. {
  63. fStream.readLine(currLine,256);
  64. }catch(StreamException &)
  65. {
  66. return false;
  67. }
  68. // find end of value name and null terminate
  69. char *nend = strstr(currLine,"=");
  70. if (nend)
  71. {
  72. *nend = 0;
  73. valueStr = trimstr(nend+1);
  74. }else
  75. valueStr = NULL;
  76. nameStr = trimstr(currLine);
  77. return true;
  78. }
  79. // -----------------------------------------
  80. bool IniFile::isName(const char *str)
  81. {
  82. return stricmp(getName(),str)==0;
  83. }
  84. // -----------------------------------------
  85. char * IniFile::getName()
  86. {
  87. return nameStr;
  88. }
  89. // -----------------------------------------
  90. int IniFile::getIntValue()
  91. {
  92. if (valueStr)
  93. return atoi(valueStr);
  94. else
  95. return 0;
  96. }
  97. // -----------------------------------------
  98. char * IniFile::getStrValue()
  99. {
  100. if (valueStr)
  101. return valueStr;
  102. else
  103. return "";
  104. }
  105. // -----------------------------------------
  106. bool IniFile::getBoolValue()
  107. {
  108. if (!valueStr)
  109. return false;
  110. if ( (stricmp(valueStr,"yes")==0) ||
  111.  (stricmp(valueStr,"y")==0) ||
  112.  (stricmp(valueStr,"1")==0) )
  113. return true;
  114. return false;
  115. }
  116. // -----------------------------------------
  117. void IniFile::writeIntValue(const char *name, int iv)
  118. {
  119. sprintf(currLine,"%s = %d",name,iv);
  120. fStream.writeLine(currLine);
  121. }
  122. // -----------------------------------------
  123. void IniFile::writeStrValue(const char *name, const char *sv)
  124. {
  125. sprintf(currLine,"%s = %s",name,sv);
  126. fStream.writeLine(currLine);
  127. }
  128. // -----------------------------------------
  129. void IniFile::writeSection(const char *name)
  130. {
  131. fStream.writeLine("");
  132. sprintf(currLine,"[%s]",name);
  133. fStream.writeLine(currLine);
  134. }
  135. // -----------------------------------------
  136. void IniFile::writeBoolValue(const char *name, int v)
  137. {
  138. sprintf(currLine,"%s = %s",name,(v!=0)?"Yes":"No");
  139. fStream.writeLine(currLine);
  140. }
  141. // -----------------------------------------
  142. void IniFile::writeLine(const char *str)
  143. {
  144. fStream.writeLine(str);
  145. }