「C Sharpの基礎 - TOML」の版間の差分

ナビゲーションに移動 検索に移動
タグ: 差し戻し済み
589行目: 589行目:
       {
       {
           await writer.WriteAsync(tomlString);
           await writer.WriteAsync(tomlString);
      }
    }
}
</syntaxhighlight>
<br>
==== TOMLファイルの修正 ====
以下の例では、指定されたTOMLファイルを読み込み、以下に示す設定を変更して、同じファイルに上書きしている。<br>
<br>
* 非同期処理
*: ファイルの読み込みでは、await TOML.ParseAsync(reader)メソッドを使用している。
*: ファイルの書き込みでは、await toml.WriteToAsync(writer)メソッドを使用している。
* ストリーミング処理
*: StreamReaderクラスおよびStreamWriterクラスを使用して、ファイルをストリームとして読み書きしている。
* TOMLファイルの更新
*: UpdateConfigメソッドで、指定された変更を行っている。
*:* [application]セクション -> "version"キーの値を"1.1.0"に変更する。
*:* [logging]セクション -> "level"キーそのものを削除する。
*:* [features]セクション -> "enabled"キーの配列から"logout"を削除する。
*:* 2つ目の<nowiki>[[servers]]</nowiki>配列 -> "ip"キーの値を"192.168.1.10"に変更する。
<br>
<syntaxhighlight lang="c#">
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Tommy;
class Program
{
    static async Task Main(string[] args)
    {
      string filePath = "sample.toml";  // 修正するTOMLファイルのパス
      try
      {
          // TOMLファイルを非同期で読み込む
          using (var reader = new StreamReader(filePath))
          {
            var toml = await TOML.ParseAsync(reader);
            // [application]セクションの"version"キーの値を"1.1.0"に変更
            toml["application"]["version"] = "1.1.0";
            // [logging]セクションの"level"キーを削除
            toml["logging"].Remove("level");
            // [features]セクションの"enabled"キーの配列から"logout"を削除
            var enabledFeatures = toml["features"]["enabled"].AsArray;
            enabledFeatures.Remove("logout");
            // 2つ目の[[servers]]配列の"ip"キーの値を"192.168.1.10"に変更
            var servers = toml["servers"].AsArray;
            if (servers.Count >= 2)
            {
                servers[1]["ip"] = "192.168.1.10";
            }
            else
            {
                Console.WriteLine("警告: 2つ目のサーバー情報が見つかりません。");
            }
            // 変更した内容を非同期でファイルに書き込む
            using (var writer = new StreamWriter(filePath))
            {
                await toml.WriteToAsync(writer);
            }
          }
      }
      catch (FileNotFoundException)
      {
          Console.WriteLine($"エラー: ファイル '{filePath}' が存在しない");
      }
      catch (TomlParseException ex)
      {
          Console.WriteLine($"エラー: TOMLファイルの解析に失敗  行 {ex.Line}, 列 {ex.Column}: {ex.Message}");
      }
      catch (IOException ex)
      {
          Console.WriteLine($"エラー: ファイルの読み書き中にIOエラーが発生: {ex.Message}");
      }
      catch (Exception ex)
      {
          Console.WriteLine($"予期せぬエラーが発生: {ex.Message}");
       }
       }
     }
     }

案内メニュー