Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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="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);
        }
Esempio n. 6
0
        /// <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);
                }
        }
Esempio n. 8
0
        /// <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);
            }
        }
Esempio n. 10
0
 /// <summary>
 /// 拡張編集オブジェクトを非同期でファイルへ書き出す。
 /// </summary>
 /// <param name="fileInfo">ファイル情報。</param>
 /// <param name="source">拡張編集オブジェクト。</param>
 public static Task WriteAsync(FileInfo fileInfo, ExEditObject source) =>
     Task.Run(() => Write(fileInfo, source));
Esempio n. 11
0
 /// <summary>
 /// 拡張編集オブジェクトを非同期でファイルへ書き出す。
 /// </summary>
 /// <param name="filePath">ファイルパス。</param>
 /// <param name="source">拡張編集オブジェクト。</param>
 public static Task WriteAsync(string filePath, ExEditObject source) =>
     Task.Run(() => Write(filePath, source));
 /// <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));