Esempio n. 1
0
        public static async Task SaveTimetable(Timetable timetable)
        {
            try
            {
                var timetableDirectory = await GetTimetableDirectory();
                var timetableFile = await timetableDirectory.CreateFileAsync(timetable.FileName, CreationCollisionOption.OpenIfExists);

                try
                {
                    var backupFile = await timetableDirectory.CreateFileAsync(timetable.FileName + backupExtension, CreationCollisionOption.OpenIfExists);
                    await timetableFile.CopyAndReplaceAsync(backupFile);
                    timetableFile = await timetableDirectory.CreateFileAsync(timetable.FileName, CreationCollisionOption.ReplaceExisting);
                }
                catch (Exception e)
                {
                    if (System.Diagnostics.Debugger.IsAttached)
                        System.Diagnostics.Debugger.Break();

                    throw new Exception(Strings.TimetableSaveToFileBackupException, e);
                }

                //XML-Generieren
                string xml;
                try
                {
                    var appVersion = Package.Current.Id.Version.Major + "." + Package.Current.Id.Version.Minor;
                    xml = timetable.WriteXml(appVersion);
                }
                catch (Exception e)
                {
                    if (System.Diagnostics.Debugger.IsAttached)
                        System.Diagnostics.Debugger.Break();

                    throw new Exception(Strings.TimetableSaveFileInnerXmlException, e);
                }

                //Alles in die Datei schreiben
                try
                {
                    using (var stream = await timetableFile.OpenStreamForWriteAsync())
                    using (StreamWriter streamWriter = new StreamWriter(stream))
                    {
                        streamWriter.Write(xml);
                    }
                }
                catch (Exception e)
                {
                    if (System.Diagnostics.Debugger.IsAttached)
                        System.Diagnostics.Debugger.Break();

                    throw new Exception(Strings.TimetableSaveFileInnerSaveException, e);
                }

                using (var stream = await (await (await GetTimetableDirectory()).CreateFileAsync(currentTimetableFileName, CreationCollisionOption.ReplaceExisting))
                    .OpenStreamForWriteAsync())
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(timetable.FileName);
                }
            }
            catch (Exception error)
            {
                //Worst Case Situation
                ComposeErrorReport(String.Format(Strings.LoadSaveSaveErrorFormat, error.Message), error, error.InnerException);
            }
        }