andriii
1

С++ Сохранение данных при сбое системы, класс BackUp, temp файл

02.12.2011, 18:21. Показов 1762. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дорогие программисты, помогите, пожалуйста, советом со следующей задачей (хотя бы направьте в нужное русло или что почитать порекомендуйте).
Заранее огромное спасибо.
Новичок.

ЗАДАНИЕ.
Записать файл Данные. Записать функцию fOpen() с режимом работы файла W (режим стирания). Т.е. есть файл, его открыли, данные прочитали, загрузили в оперативку, после этого программа работала, наработала кучу информации, собираемся по-новому перезаписать этот файл. В момент вызова fOpen() выключается сеть. Получается что fOpen() вызван, файл уничтожился, в оперативке уже ушло, данные потерялись. Создать класс BackUp для контроля потери данных. А именно как контролировать.
Есть программа требующая записать данные в файл. Формат записи на совести программы. Вспомните как работают функции fRead, fWrite: они просто берут адрес, указатель на кусок памяти, его размер и имя файла и записывают этот файл. Что в файле не имеет значения. Задача заключается в переносе информации. Рассмотреть вариант трансакции - программа выполняет работу с файлом через скрипт класс BackUp, где прописана логика как бороться с тем, что данные могут быть записаны. В итоге программа хочет перезаписать файл, она дает BackUp команду (вызывает его функцию). BackUp перед тем как стереть файл создает рядом temp файл (где полностью копируется, что было в файле или в оперативке, что еще лучше) и записывает в temp файл. Желательно в третьем файле BackUp написал: создал temp файл. Далее BackUp пытается сделать перезапись, если в момент перезаписи выключается свет temp файл есть, а в log записано первое действие, в соответствии с тем, что когда в следующий раз программа захочет получить данные она через класс BackUp данные захочет прочитать. Класс BackUp открывает log и видит, что первая часть скрипта сделана, а вторая часть скрипта не сделана, значить грузиться надо не из файла, который не существует, а грузиться надо с temp файла и при чем срочно его прочитать и создать новый рабочий файл и только потом эти данные запустить, положить в оперативку, и только потом отдать эти данные Вашей программе. Чтобы программа гарантировано работала и чтобы ситуация с отключением света ни как не сказалась на потере данных.
Вот лежит рабочий файл, если его сразу стали перезаписывать. Далее вызываем fOpen. И в режиме W и вдруг файл сразу уничтожился, а файл не успели вызвать, данные все потерялись: и здесь, и в оперативке. А если мы в оперативке создали рядом temp файл, а в log записали: temp файл создан (или любое число в .h файле). После этого пытаемся сделать fOpen(), если свет отключился у нас лежит копия и есть соответствующие записи в log. В .h файле прописать, что это последняя трансакция temp файла которая есть, т.е. предусмотреть идентификатор, который будет обозначать, что это последняя запись (не старый temp файл, а новый temp файл). Либо убивать старый temp файл постоянно, после того как Вы закончите трансакацию, чтобы файла этого не было.
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2011, 18:21
Ответы с готовыми решениями:

TrueCrypt - риск потери данных при аппаратное сбое
Подскажите, если я зашифрую системный раздел через truecrypt, а потом ( в результате воздействия...

Backup системы при помощи dd
Hi, All! После многочисленных эксперементов и, связанных с ними, переустановок и настроек системы...

При сохранение файла word (права доступа на сохранение ограничены) появляется пустой файл
Добрый день! Проблема такая: Допустим есть пользователь, у которого ограничены права (может...

Восстановление системы. Сохранение данных
Всем доброго времени суток! Прошу помощи у знающих! После обновления драйверов на моём ноуте HP...

1
18 / 18 / 16
Регистрация: 17.08.2015
Сообщений: 125
06.10.2015, 23:56 2
Лучший ответ Сообщение было отмечено как решение

Решение

Пост хоть и старый но решение я вижу так и не было предложено. Я тоже новичок и мне интересно реализация.
планирую следующий интерфейс:

C++
1
2
3
4
5
6
7
8
9
10
class cBackUp
{
    char *mFileName; 
    int mnSizeFile; 
public:
    cBackUp(const char *sFileName); 
    ~cBackUp(); 
    int WriteFile(const char *sFileName, void *pData, int nBytes);
    void *ReadFile(const char *sFileName, int *nReadedBytes, int *pErorCode);
};
0
06.10.2015, 23:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2015, 23:56
Помогаю со студенческими работами здесь

Как при сбое удержать программу и среду VB в Windows-е?
'Для корректной работы моей программы мне нужно 'определить в интернете я или нет. 'Я...

Потерял данные при сбое во время разбивки логических дисков
Приветствую. Ситуацию следующая: перед очередной переустановкой винды решил одному тому сверху...

UPS для корректного завершения работы ПК при сбое электропитания
Есть ПК (точнее только системник) с подключеным лиш сетевым кабелем. На нем крутится Windows Server...

Нужна оценка результатов Chkdsk при сбое внешнего usb диска 1 Тб
Здравствуйте! У меня та же проблема, что и у всех бедолаг в этой ветке - не читается внешний usb...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru