private static string _currentlyOpenedFile = "Untitled.mml"; // Открытый в данный момент файл /// <summary> /// Функция SaveFile(InputData inpDObj) /// /// Сохраняет объект в файл. Введенные пользователем данные, сформированные в объект /// сохраняются в JSON формате /// </summary> /// <param name="inpDObj"></param> public async static Task SaveFile(InputData inpDObj) { if (inpDObj == null) return; // Если поступил null объект, выходим из функции if (_currentlyOpenedFile != "Untitled.mml") // Если был открыт файл, перезаписываем в него { await OutputObjectToFile(inpDObj, _currentlyOpenedFile); // Выводим объект в этот файл } else // Если нет, то { await SaveAsFile(inpDObj); // Действуем по аналогии с SaveAs } }
/// <summary> /// Функция SaveFile(InputData inpDObj) /// /// Сохраняет объект в файл, предложив окно сохранения. Введенные пользователем данные, сформированные в объект /// сохраняются в JSON формате /// </summary> /// <param name="inpDObj"></param> public async static Task SaveAsFile(InputData inpDObj) { var sdg = new Microsoft.Win32.SaveFileDialog // Создаем диалоговое окно сохранения { FileName = "Document", // Имя файла по умолчанию DefaultExt = ".mml", // Расширение файла по умолчанию Filter = "MM Data (.mml)|*.mml" // Фильтр расширений файла }; var result = sdg.ShowDialog(); // Открывает диалоговое окно сохранения if (result != true) return; // Обрабатываем результат выполнения диалогового окна сохранения var filename = sdg.FileName; // Получаем имя файла, введенное пользователем await OutputObjectToFile(inpDObj, filename); // Записываем объект в файл _currentlyOpenedFile = filename; // Сохраняем имя файла }
/// <summary> /// Функция OutputObjectToFile(InputData inDObj, string filename) /// /// Функция, выводящая объект в заданный файл /// </summary> /// <param name="inDObj"></param> /// <param name="filename"></param> private async static Task OutputObjectToFile(InputData inDObj, string filename) { if (File.Exists(filename)) File.Delete(filename); // Если файл существует, удаляем его var json = JsonConvert.SerializeObject(inDObj); // Сериализуем объект в строку JSON using (var swt = new StreamWriter(new FileStream(filename, // Вывод в файл FileMode.OpenOrCreate, FileAccess.Write))) { await swt.WriteAsync(json); // Записываем строку в файл swt.Close(); // Закрываем поток записи } }