13,039
回編集
タグ: 差し戻し済み |
|||
| 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}"); | |||
} | } | ||
} | } | ||