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 async Task <LoadedObjectContainer <T> > LoadBackupMainAsync(XmlLoadingOptions options, Exception errorMessage)
 public LoadedObjectContainer <T> LoadBackupXml(XmlLoadingOptions options)
 {
     return(this.LoadBackupMain(options, null));
 }
        /// <summary>
        /// バックアップのxmlファイルを読み込む
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
#if WINDOWS_APP
        public async Task <LoadedObjectContainer <T> > LoadBackupXmlAsync(XmlLoadingOptions options)
        {
            return(await this.LoadBackupMainAsync(options, null));
        }
        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
        }
        /// <summary>
        /// xmlファイルを読み込み
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
#if WINDOWS_APP
        public async Task <LoadedObjectContainer <T> > LoadXmlAsync(XmlLoadingOptions options)