Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2014, 17:55   #1
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
Вопрос Откат записи в файл

Доброго времени суток! Припустим есть код:
Код:
mfs:=TFileStream.Create(FileName, fmOpenWrite);
TRY
  TRY
    mfs.Position:=myPosition;
    mfs.WriteBuffer(data1, sizeof(data1));
    mfs.WriteBuffer(data2, sizeof(data2));
    mfs.WriteBuffer(data3[1], sizeof(data3)*2);
    mfs.WriteBuffer(data4, sizeof(data4));
  EXCEPT
    on e:exception do begin {Здесь провести откат при ошибке записи} end;
  END;
FINALLY
  FreeAndNil(mfs);
END;
Так вот, задача состоит в следующем, если возникает ИС при записи данных в файл. То тогда в розделе EXCEPT реализовать откат записи(убрать записанние данные).
У меня есть одна идея алгоритма:
Если запись осуществлялась в конец файла его просто обрезать(if myPosition=mfs.Size then mfs.Size:=myPosition), иначе файл переписать начиная с 1-го байта и до myPosition(в другой файл). И у немуже добавить часть начиная с mfs.Position(укажет где остановилась запись) и до последнього байта.
Кстати, этот блок состоит из разних типов данных:
Код:
  mfs.WriteBuffer(data1, sizeof(data1));//integer
mfs.WriteBuffer(data2, sizeof(data2));//real
mfs.WriteBuffer(data3[1], sizeof(data3)*2);//string в кожному такому блоці можлива різна довжина рядка
mfs.WriteBuffer(data4, sizeof(data4));//extended
И сам файл. Состоит из этих данных.
Извините за нагруженость информацией, просто нехотел ничего упустить.
Так вот вопрос в том правильно ли я думаю над алгоритмом отката данных? Может кто-то посоветует лучший алгоритм.

Последний раз редактировалось Stilet; 20.01.2014 в 17:59.
Khayzenberg вне форума Ответить с цитированием
Старый 20.01.2014, 17:59   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
если возникает ИС при записи данных в файл. То тогда в розделе EXCEPT реализовать откат записи(убрать записанние данные)
Где гарантия, что при откате не возникнет новая ИС? Лучше держать копию файла на случай ИС при записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.01.2014, 18:01   #3
Khayzenberg
Пользователь
 
Регистрация: 21.07.2011
Сообщений: 54
Смущение

Цитата:
Сообщение от Аватар Посмотреть сообщение
Где гарантия, что при откате не возникнет новая ИС? Лучше держать копию файла на случай ИС при записи
Все гениальное просто! Спасибо за помощь!
Khayzenberg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Откат макроса назад Chelentano Microsoft Office Excel 11 12.04.2016 18:02
PostgreDAC сохранение и откат транзакции JUDAS БД в Delphi 2 02.05.2013 15:55
откат базы hunter03 Помощь студентам 1 25.10.2011 19:26
Откат написанной программы фЁдОр Свободное общение 13 20.12.2007 11:35