プログラム 技術

.Net 8.0でconfigファイルっぽいものを自作する

.Net 8.0でconfigファイルを使おうと思ってWebでなかなか見つからなかったので、メモしておきます。
以下のサイトでは『System.Configuration.ConfigurationManager』を使用したものになっています。しかし、今回は自作でconfigファイルもどきを作ります。値の上書きもできます。

参考サイト
App.config(アプリケーション構成ファイル)を利用する - PG日誌
App.config(アプリケーション構成ファイル)を利用する - PG日誌

2021-10-09 C#の実行形式のファイル(.NET Framework, .NET Core)にはアプリーション固 ...

続きを読む

シングルトンクラスを用意する

とりあえず今回はいちいちインスタンスを生成するのがメンドウなのでシングルトンクラスで実装します

internal class ConfigFile
{
    private static ConfigFile singleInstance;

    private ConfigFile()
    {
        // 初期化処理
    }

    public static ConfigFile GetInstance()
    {
        if (singleInstance == null)
        {
            singleInstance = new ConfigFile();
        }
        return singleInstance;
    }
}

シングルトンクラスについては以下のサイトが参考になると思います

参考サイト
【C#】シングルトンを実装する(デザインパターン)
【C#】シングルトンを実装する(デザインパターン)

C#でシングルトンパターンを使用する方法を紹介しています。シングルトン(singleton)はあるクラスのインスタンスの ...

続きを読む

データ保存ファイルを作成

次に保存するためのファイルを作成し、次回以降はそのファイルを読み込むようにします。今回使用するファイルの拡張子はJSON形式で作成しています

public Dictionary<string, string> Config;
private string _jsonPath;

private ConfigFile()
{
    string exePath = Assembly.GetExecutingAssembly().Location;
    _jsonPath = Path.ChangeExtension(exePath, ".json");
   
    if (!File.Exists(_jsonPath))
    {
        // 初回起動時のみ実行するコード
        Console.WriteLine("This is the first launch!");
        Config = new Dictionary<string, string>();
        File.WriteAllText(_jsonPath, JsonSerializer.Serialize(Config));
    }
    else
    {
        // 2回目以降の起動時に実行するコード
        Console.WriteLine("This is not the first launch.");
        Config = JsonSerializer.Deserialize<Dictionary<string, string>>(File.ReadAllText(_jsonPath));
    }
}

データをファイルに書き出す

.Net Frameworkとかと同じようにSaveメソッドを呼び出したらjsonファイルに書き出すようにします

public void Save()
{
    var json = JsonSerializer.Serialize(Config);
    File.WriteAllText(_jsonPath, JsonSerializer.Serialize(Config));
}

実際の使い方

こんな感じで使えます

// 保持していない値はエラーとなる(既存のDictionary型と同じ)
ConfigFile.GetInstance().Config["Test"];

// Testというデータ名にTestという値を設定
ConfigFile.GetInstance().Config["Test"] = "Test";

// この関数を呼ばないとデータが保持されない
ConfigFile.GetInstance().Save();

-プログラム, 技術
-