HierarchicalStorage.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //---------------------------------------------------------------------------
  2. #ifndef HierarchicalStorageH
  3. #define HierarchicalStorageH
  4. #include <registry.hpp>
  5. //---------------------------------------------------------------------------
  6. enum TStorage { stDetect, stRegistry, stIniFile };
  7. enum TStorageAccessMode { smRead, smReadWrite };
  8. //---------------------------------------------------------------------------
  9. class THierarchicalStorage
  10. {
  11. public:
  12. __fastcall THierarchicalStorage(const AnsiString AStorage);
  13. virtual __fastcall ~THierarchicalStorage();
  14. bool __fastcall OpenRootKey(bool CanCreate);
  15. virtual bool __fastcall OpenSubKey(const AnsiString SubKey, bool CanCreate);
  16. virtual bool __fastcall CreateSubKey(const AnsiString SubKey);
  17. virtual void __fastcall CloseSubKey();
  18. virtual bool __fastcall DeleteSubKey(const AnsiString SubKey) = 0;
  19. virtual void __fastcall GetSubKeyNames(Classes::TStrings* Strings) = 0;
  20. virtual void __fastcall GetValueNames(Classes::TStrings* Strings) = 0;
  21. bool __fastcall HasSubKeys();
  22. virtual void __fastcall RecursiveDeleteSubKey(const AnsiString Key);
  23. virtual void __fastcall ReadValues(Classes::TStrings* Strings, bool MaintainKeys = false);
  24. virtual void __fastcall WriteValues(Classes::TStrings* Strings, bool MaintainKeys = false);
  25. virtual bool __fastcall DeleteValue(const AnsiString Name) = 0;
  26. virtual bool __fastcall ReadBool(const AnsiString Name, bool Default) = 0;
  27. virtual int __fastcall ReadInteger(const AnsiString Name, int Default) = 0;
  28. virtual __int64 __fastcall ReadInt64(const AnsiString Name, __int64 Default) = 0;
  29. virtual TDateTime __fastcall ReadDateTime(const AnsiString Name, TDateTime Default) = 0;
  30. virtual double __fastcall ReadFloat(const AnsiString Name, double Default) = 0;
  31. virtual AnsiString __fastcall ReadStringRaw(const AnsiString Name, const AnsiString Default) = 0;
  32. virtual AnsiString __fastcall ReadString(AnsiString Name, AnsiString Default);
  33. virtual void __fastcall WriteBool(const AnsiString Name, bool Value) = 0;
  34. virtual void __fastcall WriteStringRaw(const AnsiString Name, const AnsiString Value) = 0;
  35. virtual void __fastcall WriteInteger(const AnsiString Name, int Value) = 0;
  36. virtual void __fastcall WriteInt64(AnsiString Name, __int64 Value) = 0;
  37. virtual void __fastcall WriteDateTime(const AnsiString Name, TDateTime Value) = 0;
  38. virtual void __fastcall WriteFloat(const AnsiString Name, double Value) = 0;
  39. virtual void __fastcall WriteString(const AnsiString Name, const AnsiString Value);
  40. __property AnsiString Storage = { read=FStorage };
  41. __property AnsiString CurrentSubKey = { read=GetCurrentSubKey };
  42. __property TStorageAccessMode AccessMode = { read=FAccessMode, write=SetAccessMode };
  43. protected:
  44. AnsiString FStorage;
  45. TStrings * FKeyHistory;
  46. TStorageAccessMode FAccessMode;
  47. AnsiString __fastcall GetCurrentSubKey();
  48. virtual void __fastcall SetAccessMode(TStorageAccessMode value);
  49. AnsiString __fastcall IncludeTrailingBackslash(const AnsiString S) const;
  50. AnsiString __fastcall ExcludeTrailingBackslash(const AnsiString S) const;
  51. };
  52. //---------------------------------------------------------------------------
  53. class TRegistryStorage : public THierarchicalStorage
  54. {
  55. public:
  56. __fastcall TRegistryStorage(const AnsiString AStorage, HKEY ARootKey);
  57. __fastcall TRegistryStorage(const AnsiString AStorage);
  58. virtual __fastcall ~TRegistryStorage();
  59. virtual bool __fastcall OpenSubKey(const AnsiString SubKey, bool CanCreate);
  60. virtual bool __fastcall CreateSubKey(const AnsiString SubKey);
  61. virtual void __fastcall CloseSubKey();
  62. virtual bool __fastcall DeleteSubKey(const AnsiString SubKey);
  63. virtual bool __fastcall DeleteValue(const AnsiString Name);
  64. virtual void __fastcall GetSubKeyNames(Classes::TStrings* Strings);
  65. virtual bool __fastcall ReadBool(const AnsiString Name, bool Default);
  66. virtual int __fastcall ReadInteger(const AnsiString Name, int Default);
  67. virtual __int64 __fastcall ReadInt64(const AnsiString Name, __int64 Default);
  68. virtual TDateTime __fastcall ReadDateTime(const AnsiString Name, TDateTime Default);
  69. virtual double __fastcall ReadFloat(const AnsiString Name, double Default);
  70. virtual AnsiString __fastcall ReadStringRaw(const AnsiString Name, const AnsiString Default);
  71. virtual void __fastcall WriteBool(const AnsiString Name, bool Value);
  72. virtual void __fastcall WriteInteger(const AnsiString Name, int Value);
  73. virtual void __fastcall WriteInt64(const AnsiString Name, __int64 Value);
  74. virtual void __fastcall WriteDateTime(const AnsiString Name, TDateTime Value);
  75. virtual void __fastcall WriteFloat(const AnsiString Name, double Value);
  76. virtual void __fastcall WriteStringRaw(const AnsiString Name, const AnsiString Value);
  77. virtual void __fastcall GetValueNames(Classes::TStrings* Strings);
  78. protected:
  79. int __fastcall GetFailed();
  80. virtual void __fastcall SetAccessMode(TStorageAccessMode value);
  81. __property int Failed = { read=GetFailed, write=FFailed };
  82. private:
  83. TRegistry * FRegistry;
  84. int FFailed;
  85. void __fastcall Init();
  86. };
  87. //---------------------------------------------------------------------------
  88. class TIniFileStorage : public THierarchicalStorage
  89. {
  90. public:
  91. __fastcall TIniFileStorage(const AnsiString FileName);
  92. virtual __fastcall ~TIniFileStorage();
  93. virtual bool __fastcall OpenSubKey(const AnsiString SubKey, bool CanCreate);
  94. virtual bool __fastcall DeleteSubKey(const AnsiString SubKey);
  95. virtual bool __fastcall DeleteValue(const AnsiString Name);
  96. virtual void __fastcall GetSubKeyNames(Classes::TStrings* Strings);
  97. virtual bool __fastcall ReadBool(const AnsiString Name, bool Default);
  98. virtual int __fastcall ReadInteger(const AnsiString Name, int Default);
  99. virtual __int64 __fastcall ReadInt64(const AnsiString Name, __int64 Default);
  100. virtual TDateTime __fastcall ReadDateTime(const AnsiString Name, TDateTime Default);
  101. virtual double __fastcall ReadFloat(const AnsiString Name, double Default);
  102. virtual AnsiString __fastcall ReadStringRaw(const AnsiString Name, const AnsiString Default);
  103. virtual void __fastcall WriteBool(const AnsiString Name, bool Value);
  104. virtual void __fastcall WriteInteger(const AnsiString Name, int Value);
  105. virtual void __fastcall WriteInt64(AnsiString Name, __int64 Value);
  106. virtual void __fastcall WriteDateTime(const AnsiString Name, TDateTime Value);
  107. virtual void __fastcall WriteFloat(const AnsiString Name, double Value);
  108. virtual void __fastcall WriteStringRaw(const AnsiString Name, const AnsiString Value);
  109. virtual void __fastcall GetValueNames(Classes::TStrings* Strings);
  110. private:
  111. TIniFile * FIniFile;
  112. AnsiString __fastcall GetCurrentSection();
  113. protected:
  114. __property AnsiString CurrentSection = { read=GetCurrentSection };
  115. };
  116. //---------------------------------------------------------------------------
  117. AnsiString __fastcall MungeStr(const AnsiString Str);
  118. AnsiString __fastcall UnMungeStr(const AnsiString Str);
  119. //---------------------------------------------------------------------------
  120. #endif