AppSettings.cpp 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. //-----------------------------------------------------------------------------
  2. //
  3. // Copyright (c) 2005,珠海友通科技有限公司——通用型DROC
  4. // All rights reserved.
  5. //
  6. // 文件名称:AppSettings.cpp
  7. // 文件标识:见配置管理计划书.
  8. // 摘 要:
  9. //
  10. // 当前版本:0.1
  11. // 作 者:胡昌红
  12. // 完成日期:2005-3-5 16:37:02
  13. //
  14. // 取代版本:
  15. // 原 作 者:
  16. // 完成日期:
  17. //
  18. //-----------------------------------------------------------------------------
  19. #include "StdAfx.h"
  20. #include ".\appsettings.h"
  21. //-----------------------------------------------------------------------------
  22. #ifdef _DEBUG
  23. #undef THIS_FILE
  24. static char THIS_FILE[]=__FILE__;
  25. #define new DEBUG_NEW
  26. #endif
  27. //-----------------------------------------------------------------------------
  28. //
  29. // 函数名称 : CAppSettings::CAppSettings
  30. // 函数描述 : CAppSettings类的构造函数.
  31. // 返回类型 :
  32. // 接口参数 : void
  33. //
  34. //-----------------------------------------------------------------------------
  35. CAppSettings::CAppSettings(void) : m_XmlMarkup(NULL)
  36. {
  37. }
  38. //-----------------------------------------------------------------------------
  39. //
  40. // 函数名称 : CAppSettings::CAppSettings
  41. // 函数描述 : CAppSettings类的构造函数.
  42. // 返回类型 :
  43. // 接口参数 : const CString &strFileName: 处理的 XML 文件名及路径.
  44. //
  45. //-----------------------------------------------------------------------------
  46. CAppSettings::CAppSettings(const CString &strFileName) : m_XmlMarkup(NULL)
  47. {
  48. m_XmlMarkup = new CMarkup();
  49. try
  50. {
  51. m_XmlMarkup->Load(strFileName);
  52. }
  53. catch(...)
  54. {
  55. TRACE(_T("Warning: 读取系统资源文件失败,可能不存在该文件。文件: %s; 行: %d\n"), __FILE__, __LINE__);
  56. }
  57. }
  58. //-----------------------------------------------------------------------------
  59. //
  60. // 函数名称 : CAppSettings::~CAppSettings
  61. // 函数描述 : CAppSettings类的析构函数.
  62. // 返回类型 :
  63. // 接口参数 : void
  64. //
  65. //-----------------------------------------------------------------------------
  66. CAppSettings::~CAppSettings(void)
  67. {
  68. delete m_XmlMarkup;
  69. m_XmlMarkup = NULL;
  70. }
  71. //-----------------------------------------------------------------------------
  72. //
  73. // 函数名称 : CAppSettings::Load
  74. // 函数描述 : 读取 XML 文件
  75. // 返回类型 : bool
  76. // 接口参数 : const CString &strFileName: 处理的 XML 文件名及路径.
  77. //
  78. //-----------------------------------------------------------------------------
  79. bool CAppSettings::Load(const CString &strFileName)
  80. {
  81. bool bResult;
  82. if ( m_XmlMarkup != NULL )
  83. {
  84. delete m_XmlMarkup;
  85. m_XmlMarkup = NULL;
  86. }
  87. m_XmlMarkup = new CMarkup();
  88. try
  89. {
  90. bResult = m_XmlMarkup->Load(strFileName);
  91. }
  92. catch(...)
  93. {
  94. TRACE(_T("Warning: 读取系统资源文件失败,可能不存在该文件。文件: %s; 行: %d\n"), __FILE__, __LINE__);
  95. bResult = false;
  96. }
  97. return bResult;
  98. }
  99. //-----------------------------------------------------------------------------
  100. //
  101. // 函数名称 : CAppSettings::GetAllDataToVector
  102. // 函数描述 : 读取 XML 文件中的所有信息到 vector<DATA> vecData 中
  103. // 返回类型 : bool
  104. // 接口参数 : void
  105. //
  106. //-----------------------------------------------------------------------------
  107. bool CAppSettings::GetAllDataToVector(void)
  108. {
  109. if (m_XmlMarkup == NULL)
  110. return false;
  111. bool bResult = true;
  112. m_XmlMarkup->ResetPos();
  113. bResult &= m_XmlMarkup->FindChildElem();
  114. ASSERT( bResult );
  115. m_XmlMarkup->ResetChildPos();
  116. while (m_XmlMarkup->FindChildElem())
  117. {
  118. DATA DataTemp;
  119. DataTemp.key = m_XmlMarkup->GetChildAttrib( _T("key") );
  120. DataTemp.value = m_XmlMarkup->GetChildAttrib( _T("value") );
  121. vecData.push_back(DataTemp);
  122. }
  123. return bResult && (vecData.size() > 0 ? true : false);
  124. }
  125. //-----------------------------------------------------------------------------
  126. //
  127. // 函数名称 : CAppSettings::operator[]
  128. // 函数描述 : 读取系统的资源项.重载下标运算符,使用方法如下:
  129. // CAppSettings g_Resource("文件名");
  130. // CString strMsg = g_Resource["资源项"];
  131. // 返回类型 : CString 为空,则表示 不存在 该资源项值.
  132. // 接口参数 : const CString &strKey: 资源项关键字.
  133. //
  134. //-----------------------------------------------------------------------------
  135. CString CAppSettings::operator [](const CString &strKey) const
  136. {
  137. if (m_XmlMarkup == NULL)
  138. return _T("");
  139. bool bResult = true;
  140. m_XmlMarkup->ResetPos();
  141. bResult &= m_XmlMarkup->FindChildElem();
  142. ASSERT( bResult );
  143. m_XmlMarkup->ResetChildPos();
  144. while (m_XmlMarkup->FindChildElem())
  145. {
  146. if (strKey.Compare(m_XmlMarkup->GetChildAttrib( _T("key") )) == 0)
  147. {
  148. return m_XmlMarkup->GetChildAttrib( _T("value") );
  149. }
  150. }
  151. return _T("");
  152. }
  153. //-----------------------------------------------------------------------------
  154. //
  155. // 函数名称 : CAppSettings::GetValue
  156. // 函数描述 : 读取系统的资源项的值.
  157. // 返回类型 : CString 为空,则表示 不存在 该资源项值.
  158. // 接口参数 : const CString &strKey : 资源项关键字.
  159. //
  160. //-----------------------------------------------------------------------------
  161. CString CAppSettings::GetValue(const CString &strKey) const
  162. {
  163. if (m_XmlMarkup == NULL)
  164. return _T("");
  165. bool bResult = true;
  166. m_XmlMarkup->ResetPos();
  167. bResult &= m_XmlMarkup->FindChildElem();
  168. ASSERT( bResult );
  169. m_XmlMarkup->ResetChildPos();
  170. while (m_XmlMarkup->FindChildElem())
  171. {
  172. if (strKey.Compare(m_XmlMarkup->GetChildAttrib( _T("key") )) == 0)
  173. {
  174. return m_XmlMarkup->GetChildAttrib( _T("value") );
  175. }
  176. }
  177. return _T("");
  178. }
  179. //-----------------------------------------------------------------------------
  180. //
  181. // 函数名称 : CAppSettings::GetValueByKey
  182. // 函数描述 : 读取系统的资源项的值. 功能同 GetValue().
  183. // 返回类型 : CString 为空,则表示 不存在 该资源项值.
  184. // 接口参数 : const CString &strKey : 资源项关键字.
  185. //
  186. //-----------------------------------------------------------------------------
  187. CString CAppSettings::GetValueByKey(const CString &strKey) const
  188. {
  189. if (m_XmlMarkup == NULL)
  190. return _T("");
  191. m_XmlMarkup->ResetPos();
  192. /*ASSERT*/( m_XmlMarkup->FindChildElem() );
  193. m_XmlMarkup->ResetChildPos();
  194. while (m_XmlMarkup->FindChildElem())
  195. {
  196. if (strKey.Compare(m_XmlMarkup->GetChildAttrib(_T("key"))) == 0)
  197. {
  198. return m_XmlMarkup->GetChildAttrib(_T("value"));
  199. }
  200. }
  201. return _T("");
  202. }
  203. //-----------------------------------------------------------------------------
  204. //
  205. // 函数名称 : CAppSettings::SetValue
  206. // 函数描述 : 修改该资源项的值.
  207. // 返回类型 : bool
  208. // 接口参数 : const CString &strKey :资源项关键字.
  209. // 接口参数 : const CString &strValue : 资源项值.
  210. //
  211. //-----------------------------------------------------------------------------
  212. bool CAppSettings::SetValue(const CString &strKey, const CString &strValue) const
  213. {
  214. if (m_XmlMarkup == NULL)
  215. return false;
  216. bool bResult = true;
  217. m_XmlMarkup->ResetPos();
  218. bResult &= m_XmlMarkup->FindChildElem();
  219. ASSERT( bResult );
  220. m_XmlMarkup->ResetChildPos();
  221. while (m_XmlMarkup->FindChildElem())
  222. {
  223. if (strKey.Compare(m_XmlMarkup->GetChildAttrib( _T("key") )) == 0)
  224. {
  225. return m_XmlMarkup->SetChildAttrib( _T("value"), strValue);
  226. }
  227. }
  228. return false;
  229. }
  230. //-----------------------------------------------------------------------------
  231. //
  232. // 函数名称 : CAppSettings::AddItem
  233. // 函数描述 : 添加资源项. 该操作不判断关键字在 XML 文档中是否已存在.
  234. // 返回类型 : bool
  235. // 接口参数 : const CString &strKey :资源项关键字.
  236. // 接口参数 : const CString &strValue : 资源项值.
  237. //
  238. //-----------------------------------------------------------------------------
  239. bool CAppSettings::AddItem(const CString &strKey, const CString &strValue) const
  240. {
  241. if (m_XmlMarkup == NULL)
  242. return false;
  243. bool bResult = true;
  244. m_XmlMarkup->ResetPos();
  245. bResult &= m_XmlMarkup->FindChildElem();
  246. m_XmlMarkup->ResetChildPos();
  247. bResult &= m_XmlMarkup->AddChildElem( _T("Data") );
  248. bResult &= m_XmlMarkup->AddChildAttrib( _T("key"), strKey );
  249. bResult &= m_XmlMarkup->AddChildAttrib( _T("value"), strValue );
  250. ASSERT( bResult );
  251. return bResult;
  252. }
  253. //-----------------------------------------------------------------------------
  254. //
  255. // 函数名称 : CAppSettings::DeleteItem
  256. // 函数描述 : 删除资源项.
  257. // 返回类型 : bool
  258. // 接口参数 : const CString &strKey :资源项关键字.
  259. //
  260. //-----------------------------------------------------------------------------
  261. bool CAppSettings::DeleteItem(const CString &strKey) const
  262. {
  263. if (m_XmlMarkup == NULL)
  264. return false;
  265. bool bResult = true;
  266. m_XmlMarkup->ResetPos();
  267. bResult &= m_XmlMarkup->FindChildElem();
  268. ASSERT( bResult );
  269. m_XmlMarkup->ResetChildPos();
  270. while (m_XmlMarkup->FindChildElem())
  271. {
  272. if (strKey.Compare(m_XmlMarkup->GetChildAttrib( _T("key") )) == 0)
  273. {
  274. return m_XmlMarkup->RemoveChildElem();
  275. }
  276. }
  277. return false;
  278. }
  279. //-----------------------------------------------------------------------------
  280. //
  281. // 函数名称 : CAppSettings::Save
  282. // 函数描述 : 保存 XML 文件.
  283. // 返回类型 : bool
  284. // 接口参数 : const CString &strFileName : 文件名.
  285. //
  286. //-----------------------------------------------------------------------------
  287. bool CAppSettings::Save(const CString &strFileName)
  288. {
  289. ASSERT ( m_XmlMarkup != NULL );
  290. if(!m_XmlMarkup) return true;
  291. return m_XmlMarkup->Save(strFileName);
  292. }