private LoadedObjectContainer <T> LoadBackupMain(XmlLoadingOptions options, Exception errorMessage) #endif { try { //バックアップファイルを読み込む #if WINDOWS_APP var folder = ApplicationData.Current.LocalFolder; var file = await folder.GetFileAsync(backUpNameHeader + fileName); var loaded = await this.LoadMainAsync(folder, file); #else var loaded = this.LoadMain(backUpNameHeader + fileName); #endif return(new LoadedObjectContainer <T>(loaded, errorMessage)); } catch (FileNotFoundException) { //バックアップファイルも存在しなかった場合 if (options.HasFlag(XmlLoadingOptions.IgnoreAllException) || options.HasFlag(XmlLoadingOptions.IgnoreNotFound)) { //例外を無視する設定の場合はnewして返す return(new LoadedObjectContainer <T> ((options.HasFlag(XmlLoadingOptions.ReturnNull) ? null : new T()), errorMessage)); } else { //例外を投げる throw; } } catch (Exception e) { //その他の例外 if (options.HasFlag(XmlLoadingOptions.IgnoreAllException)) { return(new LoadedObjectContainer <T> ((options.HasFlag(XmlLoadingOptions.ReturnNull) ? null : new T()), errorMessage ?? e)); } else { throw; } } }
public LoadedObjectContainer <T> LoadXml(XmlLoadingOptions options) #endif { Exception errorMessage = null; try { //ファイルから読み込み #if WINDOWS_APP var folder = ApplicationData.Current.LocalFolder; var file = await folder.GetFileAsync(this.fileName); var loaded = await this.LoadMainAsync(folder, file); #else var loaded = this.LoadMain(this.fileName); #endif //自動バックアップを使用する場合、正常に読み込めたファイルを別名でコピー if (options.HasFlag(XmlLoadingOptions.UseBackup)) { try { #if WINDOWS_APP var copied = await file.CopyAsync (folder, backUpNameHeader + this.fileName, NameCollisionOption.ReplaceExisting); #else File.Copy(this.fileName, backUpNameHeader + this.fileName, true); #endif } catch (Exception e) { return(new LoadedObjectContainer <T>(loaded, e)); } } //コンテナに入れて返す return(new LoadedObjectContainer <T>(loaded, null)); } catch (FileNotFoundException) { //ファイルが存在しない場合 if (options.HasFlag(XmlLoadingOptions.UseBackup)) { //バックアップを使用する設定の場合はスルー //errorMessage = null; } else if (options.HasFlag(XmlLoadingOptions.IgnoreAllException) || options.HasFlag(XmlLoadingOptions.IgnoreNotFound)) { //例外を無視する設定の場合はnewして返す return(new LoadedObjectContainer <T>( (options.HasFlag(XmlLoadingOptions.ReturnNull) ? null : new T()), null)); } else { //例外を投げる throw; } } catch (Exception e) { //その他の例外 if (options.HasFlag(XmlLoadingOptions.UseBackup)) { //例外を記憶 errorMessage = e; } else if (options.HasFlag(XmlLoadingOptions.IgnoreAllException)) { //例外を無視する設定の場合はnewして返す return(new LoadedObjectContainer <T> ((options.HasFlag(XmlLoadingOptions.ReturnNull) ? null : new T()), e)); } else { //例外を投げる throw; } } //バックアップを使用する設定の場合、バックアップファイルを読み込む #if WINDOWS_APP return(await this.LoadBackupMainAsync(options, errorMessage)); #else return(this.LoadBackupMain(options, errorMessage)); #endif }