Обеспечить автосохранение в C#

Этот пример расширяет пример scribble (наиболее недавно описанный в post Предоставить отменить и повторить в C# ), поэтому он предоставляет функцию автоматического сохранения.

Следующий код создает имя файла автосохранения программы.

// Имя файла автосохранения.
private string AutoSaveFile = Path.GetTempPath() + "scribble.tmp";
 // Имя файла автосохранения.
private string AutoSaveFile = Path.GetTempPath () + "scribble.tmp"; ...

Предыдущая версия программы сохраняет моментальный снимок всякий раз, когда вы вносите изменения в чертеж. Затем он использует сохраненные снимки для обеспечения функций отмены и повтора. Следующий код показывает версию новой программы SaveSnapshot. Новый код выделен синим цветом.

// Сохранение моментального снимка в списке отмены.
private void SaveSnapshot(bool auto_save)
{
    // Сохранение моментального снимка.
    UndoList.Push(GetSnapshot());

    // Пусто список повтора.
    if (RedoList.Count > 0) RedoList = new Stack();

    // Включить или отключить пункты меню «Отменить» и «Повторить».
    EnableUndo();

    // Автосохранение.
    if (auto_save) AutoSave();
}

// Автосохранение.
private void AutoSave()
{
    SaveIntoFile(AutoSaveFile);
}

Метод SaveSnapshot сохраняет снимок как прежде, а затем, если переменная auto_save истинна, она вызывает метод AutoSave. Этот метод просто вызывает метод SaveIntoFile, предлагая ему сохранить моментальный снимок в файле автосохранения. Метод SaveIntoFile - это тот же метод, который программа использует для создания сохраненных файлов scribble. (См. Сообщение Сохранение и восстановление рисунков пользователем в C# для получения информации о том, как это работает.)

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

// Ищите файл автосохранения.
private void Form1_Load(object sender, EventArgs e)
{
    // Посмотрим, существует ли файл.
    if (File.Exists(AutoSaveFile))
    {
        // Попросите пользователя загрузить этот файл.
        if (MessageBox.Show(
            "An auto-save file exists. Do you want to load it?",
            "Restore?", MessageBoxButtons.YesNo,
            MessageBoxIcon.Question)
            == DialogResult.Yes)
        {
            // Загрузите файл.
            LoadFromFile(AutoSaveFile);
        }
    }
}

Этот код проверяет, существует ли файл автосохранения. Если это так, программа спрашивает, хотите ли вы ее перезагрузить. Если вы нажмете «Да», код вызывает LoadFromFileMethod (который также используется для загрузки сохраненных файлов scribble), чтобы загрузить его.

Последним новым фрагментом кода является следующий обработчик события FormClosing.

// Удалите файл автосохранения.
private void Form1_FormClosing(object sender,
    FormClosingEventArgs e)
{
    if (File.Exists(AutoSaveFile)) File.Delete(AutoSaveFile);
}

Если файл автосохранения существует, этот код удаляет его. Это заставляет программу удалять файл, если он закрывается нормально. Чтобы сделать сбой программы, нажмите кнопку маленькой бомбы в правом углу панели инструментов.

Это все, что вам действительно нужно для простого автосохранения. Если программа позволяет сохранять и восстанавливать данные, то у нее уже есть методы, необходимые для сохранения и восстановления файла автосохранения.

Источник: http://csharphelper.com/blog/2015/03/provide-autosave-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector