Информация об изменениях

Сообщение Re: Транзакция на несколько файлов от 11.09.2018 17:54

Изменено 11.09.2018 17:54 Shmj

Re: Транзакция на несколько файлов
Здравствуйте, #John, Вы писали:

J>надо добавить информацию сначала в один файл, потом во второй,

J>если процесс оборвался перед записью во второй файл,
J>то изменения в первом файле должны откатиться, как такое можно реализовать?

Вам правильно порекомендовали выше заюзать ntfs-transaction или готовую СУБД вместо работы с файлами, где механизм транзакций поддерживается из коробки.

Но! В качестве альтернативы попробую предложить альтернативу.

Итак:

1. К каждой записи добавляете процерку целостности (хеш). Т.е. считываете строку и можете проверить не оборвалась ли она на середине.

2. При запуске вашей проги проверяете конец файлов — корректные ли там данные (т.е. целостность). Если оборвалось — то урезает (Seek) до предыдущей записи. Проверять нужно и первый и второй файл.

3. Если сбой произошел штатно, т.е. завершение процесса не произошло (а, к примеру, файл был заблокирован другим процессом) — то это отлавливается исключениями.

Пока не вижу подводных камней, но к критике готов.
Re: Транзакция на несколько файлов
Здравствуйте, #John, Вы писали:

J>надо добавить информацию сначала в один файл, потом во второй,

J>если процесс оборвался перед записью во второй файл,
J>то изменения в первом файле должны откатиться, как такое можно реализовать?

Вам правильно порекомендовали выше заюзать ntfs-transaction или готовую СУБД вместо работы с файлами, где механизм транзакций поддерживается из коробки.

Но! В качестве разминки попробую предложить альтернативу. Итак:

1. К каждой записи добавляете процерку целостности (хеш). Т.е. считываете строку и можете проверить не оборвалась ли она на середине.

2. При запуске вашей проги проверяете конец файлов — корректные ли там данные (т.е. целостность). Если оборвалось — то урезает (Seek) до предыдущей записи. Проверять нужно и первый и второй файл.

3. Если сбой произошел штатно, т.е. завершение процесса не произошло (а, к примеру, файл был заблокирован другим процессом) — то это отлавливается исключениями.

Пока не вижу подводных камней, но к критике готов.