Як зберігати образ файлу в пам'яті?
Вобщем проблема така, я написав компонент, прообразом якого став TIniFile, так ось, єдина відмінність (і головна відмінність) його в тому, що у іні файлу у кожної опції, є тільки одне значення, а у мене їх два, і ще плюс до цього дані зашифровуються, досить добре. так ось. проблема полягає в тому, що для роботи з файлом, доводиться на початку будь-якої функції розшифровувати, а потім зашифровувати файл, звичайно все це робиться автоматично, тобто в нутрі компонента, це все проиходит непомітно "для очей" програміста, тобто на початку кожної функції файл розшифровується а потім зашифрована (щось я повотряюсь), ну так ось, це все те добре, коли комп'ютер працює нормально, і коли додаток завершують коректно, але от якщо додаток вбити за допомогою TerminateProcess, або просто вирубати комп , є шанс, що в цей час компонент буде що-небудь змінювати в файлі, розшифрує його і не встигне зашифрувати.
Так ось, у мене з'явилася ідея, про те, щоб при старті програми компонент робив образ файлу в пам'яті, працював з ним в пам'яті, а через кожну секунду, скидав на жорсткий диск вже зашифрований файл, тобто ймовірність, того що на диску виявиться розшифрований файл, майже дорівнює нулю. все б добре, але я не знаю, як це зробити :(. можть хто знає і допоможе? Просто дуже потрібно довести його до пуття.
для тоо, щоб відповісти, треба знати, для чого такий файл використовується, для зберігання: яких даних, кака часто вони змінюються.
> Прообразом якого став TIniFile
> Розшифрує його і не встигне зашифрувати
Зроби прообразом TMemIniFile і бережи його в пам'яті. -) розшифровується один раз при зчитуванні з диска а Шифр один раз при збереженні.
Раз в секунду скидати на диск файл (я так розумію, не малеькій) - пожалій хард у бідного користувача. А якщо файл маленький, то від втрати даних при перебоях з харчуванням це не врятує.
А ваще - подібні проблеми люди вирішували, коли створювали системи обробки транзакцій в БД, щоб обесечіть цілісність і несуперечливість бази під час апаратних збоїв та ін. Наскільки я розумію, - рішення там не найпростіші.
>> panov
Змінюються вони дуже часто - кілька разів на секунду.
>> ЮЮ
Справа в тому що компонент не прямий прообраз, а повністю написаний з нуля новий компонент, тільки я деякі моменти дивився в TIniFile-е і концепції основні. а з TMemIniFile-му я не знайомий. як-то. треба буде подивитися ще.
>> TUser
Файл, я пологаю не повинен буде перевищувати. Мегабат 5-10. да уж якщо не кожну секунду, то кожну 2-ю секунду. а якщо раптом перебої харчування, то останнє оновлення буде 2х секундної давності- а це не так страшно, як повністю розшифрований файл.
Блін, я все одно не зрозумію навіщо тобі на диску розшифрований варіант. Зберігай тільки зашифрований. При откпитіі розшифровуй.
Та ні, справа в тому, що розшифрованого варіанту на диску мені і не потрібно, але так як при кожній процедурі (наприклад ReadSection) на початку цієї процедури файл на диску розшифровується, потім зчитується інфа і потім назад зашифрована, але проблема в тому, як раз якщо посередині цієї операції, тобто при читанні з розшифрованого файлу, перезавантажити комп, то файл на диску залишається розшифрований, ось я і хочу зробити так, що б при "завантаженні файлу в комопнент" він робив його "образ" в пам'яті розшифровував там, і працював з ним, як з звичайним файлом, і тільки кожні 2 секунди (тобто на вимогу програміста) скидав зашифрований його варіант з пам'яті на диск. ось. а як це реалізувати не знаю ще. (
Значить мені нічим не можна допомогти?
> На початку цієї процедури файл на диску розшифровується,
> Потім зчитується інфа і потім назад зашифрована,
А структуру теж необхідно зашифровувати чи що? Що заважає шифрувати тільки параметри і їх значення?
100% Це надумана необхідність зберігати розшифрований варіант на диску. У чому користь? Для яких цілей? Упевнений що ти помилився при плануванні програми.
> Dima_dvp
Згоден на 100%.
Навіщо розшифровувати на диск.
Це, м'яко кажучи, нерозумно.
Потрібно розшифровувати значення, читаючи файл, і відразу заносити їх в пам'ять.
Хоча б на увазі масиву якогось, вже не знаю.
В тому то і справа, що в масиві зберігати цю інформацію зовсім не зручно. (.
А як зберігати її в іншому вигляді в пам'яті я незнаю ще поки.
Усе. вобщем я вдячний всім. а зокрема ЮЮ
так як без нього я б і не помітив такого компонента як Meminifile%) зараз переробив свій компонент і він як я помітив став працювати в 9 разів швидше :) спасибі ще раз