/// <summary> /// 拡張編集オブジェクトファイルのセクションコレクションから /// 拡張編集オブジェクトを作成する。 /// </summary> /// <param name="sections">セクションコレクション。</param> /// <returns>拡張編集オブジェクト。</returns> public static ExEditObject FromExoFileSections( IniFileSectionCollection sections) { if (sections == null) { throw new ArgumentNullException(nameof(sections)); } var result = new ExEditObject(); // [exedit] セクションのプロパティ値設定 FromSectionsToFileProperties(sections, result); // レイヤーアイテムのベースセクション群([0] ~ [N])取得 var itemBaseSections = GetLayerItemBaseSections(sections); // レイヤーアイテム群作成 var items = itemBaseSections .AsParallel() .AsOrdered() .Select(s => FromSectionsToLayerItem(sections, s)); // レイヤーアイテム群設定 foreach (var item in items) { result.LayerItems.Add(item); } return(result); }
/// <summary> /// 拡張編集オブジェクトファイルのセクションコレクションから /// 拡張編集オブジェクトを作成する。 /// </summary> /// <param name="sections">セクションコレクション。</param> /// <returns>拡張編集オブジェクト。</returns> public static ExEditObject FromExoFileSections( IniFileSectionCollection sections) { if (sections == null) { throw new ArgumentNullException(nameof(sections)); } var result = new ExEditObject(); // [exedit] セクションのプロパティ値設定 FromSectionsToFileProperties(sections, result); // レイヤーアイテムのベースセクション群([0] ~ [N])取得 var itemBaseSections = GetLayerItemBaseSections(sections); // レイヤーアイテム群作成 var items = itemBaseSections .AsParallel() .AsOrdered() .Select(s => FromSectionsToLayerItem(sections, s)); // レイヤーアイテム群設定 foreach (var item in items) { result.LayerItems.Add(item); } return result; }
/// <summary> /// 拡張編集オブジェクトファイルを読み取る。 /// </summary> /// <param name="fileInfo">ファイル情報。</param> /// <param name="strict">厳格な形式チェックを行うならば true 。</param> /// <returns>拡張編集オブジェクト。</returns> public static ExEditObject Read(FileInfo fileInfo, bool strict = false) { if (fileInfo == null) { throw new ArgumentNullException(nameof(fileInfo)); } var sections = IniFileParser.FromFile(fileInfo, strict); return(ExEditObject.FromExoFileSections(sections)); }
/// <summary> /// 拡張編集オブジェクトをファイルへ書き出す。 /// </summary> /// <param name="filePath">ファイルパス。</param> /// <param name="source">拡張編集オブジェクト。</param> public static void Write(string filePath, ExEditObject source) { if (filePath == null) { throw new ArgumentNullException(nameof(filePath)); } if (source == null) { throw new ArgumentNullException(nameof(source)); } Write(new FileInfo(filePath), source); }
/// <summary> /// セクションコレクションからファイルセクションを取得、変換し、 /// 拡張編集オブジェクトのプロパティ値を設定する。 /// </summary> /// <param name="sections">セクションコレクション。</param> /// <param name="target">設定先の拡張編集オブジェクト。</param> private static void FromSectionsToFileProperties( IniFileSectionCollection sections, ExEditObject target) { Debug.Assert(sections != null); Debug.Assert(target != null); // ファイルセクション取得 var section = sections.FirstOrDefault(s => s.Name == SectionNameOfFile); if (section == null) { throw new FormatException( @"The [" + SectionNameOfFile + @"] section is not found."); } // プロパティ値設定 ExoFileItemsConverter.ToProperties(section.Items, ref target); }
/// <summary> /// 拡張編集オブジェクトをファイルへ書き出す。 /// </summary> /// <param name="fileInfo">ファイル情報。</param> /// <param name="source">拡張編集オブジェクト。</param> public static void Write(FileInfo fileInfo, ExEditObject source) { if (fileInfo == null) { throw new ArgumentNullException(nameof(fileInfo)); } if (source == null) { throw new ArgumentNullException(nameof(source)); } var text = source.ToExoFileSections().ToString(); using (var stream = fileInfo.OpenWrite()) using (var writer = new StreamWriter(stream, Encoding.GetEncoding(932))) { writer.WriteLine(text); } }
/// <summary> /// 拡張編集オブジェクトを非同期でファイルへ書き出す。 /// </summary> /// <param name="fileInfo">ファイル情報。</param> /// <param name="source">拡張編集オブジェクト。</param> public static Task WriteAsync(FileInfo fileInfo, ExEditObject source) => Task.Run(() => Write(fileInfo, source));
/// <summary> /// 拡張編集オブジェクトを非同期でファイルへ書き出す。 /// </summary> /// <param name="filePath">ファイルパス。</param> /// <param name="source">拡張編集オブジェクト。</param> public static Task WriteAsync(string filePath, ExEditObject source) => Task.Run(() => Write(filePath, source));