
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.173] |
![]() |
|
![]() |
|
|
Всем привет!
Просьба помочь в следующей проблеме: есть свой класс, в котором есть свойства, на свойства повешены функции считывания из файла. Класс создается при запуске программы и не уничтожается. Проблема состоит в том, что когда я запрашиваю нужное свойство в первый раз - оно считывается из файла и возвращается, но если запросить во время выполнения, тогда ничего не меняется, возвращается тоже самое что в первый раз, должно произойти считывание из ini файла, но этого не происходит, не могу никак понять почему. Чтобы лучше понять, можно сделать запрос по таймеру на эту функцию, и начать изменять в файле нужный ident в нужной section, будет видно, что при изменении в файле, в свойство класса не возвращается измененное значение, я в замешательстве (попробовал в delphi 7, там норм работает, в Lazarus не хочет) ![]() код ниже ![]() ![]() unit SettingsHelper; interface uses Classes, SysUtils, IniFiles; type { TSettings } TSettings = class private iSettingsFile: TIniFile; function GetBaseCurrency: String; procedure SetBaseCurrency(Value: String); function GetSettingsFileName: String; public constructor Create(); destructor Destroy(); override; property BaseCurrency: String read GetBaseCurrency write SetBaseCurrency; end; const cSettingsFileName = 'settings'; cSettingsFileExt = '.conf'; szSettings = 'Settings'; implementation function TSettings.GetBaseCurrency: String; begin Result := iSettingsFile.ReadString(szSettings, 'BaseCurrency', ''); end; procedure TSettings.SetBaseCurrency(Value: String); begin iSettingsFile.WriteString(szSettings, 'BaseCurrency', Value); end; function TSettings.GetSettingsFileName: String; begin Result := ExtractFileDir(ParamStr(0)) + '\' + cSettingsFileName + cSettingsFileExt; end; constructor TSettings.Create(); begin inherited; iSettingsFile := TIniFile.Create(GetSettingsFileName); end; destructor TSettings.Destroy(); begin iSettingsFile.Free; inherited; end; end. |
Сообщ.
#2
,
|
|
|
Возможно, что ini файл считывается в память, а потом все данные берутся из памяти.
Я бы попробовал вместе со считыванием файла уточнять время последней модификации. Если текущее значение времени модификации не совпало со временем в переменной, то нужно организовать перечитывание ini файла с диска. Скорее всего в классе TIniFile есть такой метод. Или же совсем просто. Удалить поле TIniFile, а при чтении настроек всегда заново создавать переменную этого класса. |