MENU

C# iniファイル読み取り・書き取り

iniファイルは、アプリケーションの設定を簡単に管理するための古くからある形式です。C#でプログラムを開発する際、iniファイルを読み取ったり書き込んだりする必要がしばしば発生します。この記事では、C#を使ってiniファイルの読み取りと書き込みを行う方法を、初心者にも分かりやすく解説します。

目次

iniファイルの基本構造

まず、典型的なiniファイルの構造を見てみましょう:

[AppSettings]
Language=Japanese
Theme=Dark

[UserPreferences]
AutoSave=true
FontSize=12

iniファイルは、[セクション名]で始まるセクションと、その下にキー=値の形式で書かれる設定項目で構成されています。

C#でiniファイルを読み取る

C#には、iniファイルを直接扱うための組み込み関数がないため、自前で実装する必要があります。以下に、iniファイルを読み取るための基本的なコード例を示します:

using System;
using System.Collections.Generic;
using System.IO;

public class IniFileHandler
{
    private Dictionary<string, Dictionary<string, string>> iniContent;

    public IniFileHandler()
    {
        iniContent = new Dictionary<string, Dictionary<string, string>>();
    }

    public void ReadIniFile(string filePath)
    {
        string currentSection = "";
        foreach (string line in File.ReadLines(filePath))
        {
            string trimmedLine = line.Trim();
            if (string.IsNullOrWhiteSpace(trimmedLine) || trimmedLine.StartsWith(";"))
                continue; // 空行やコメントをスキップ

            if (trimmedLine.StartsWith("[") && trimmedLine.EndsWith("]"))
            {
                currentSection = trimmedLine.Substring(1, trimmedLine.Length - 2);
                iniContent[currentSection] = new Dictionary<string, string>();
            }
            else
            {
                string[] parts = trimmedLine.Split(new[] { '=' }, 2);
                if (parts.Length == 2)
                {
                    string key = parts[0].Trim();
                    string value = parts[1].Trim();
                    iniContent[currentSection][key] = value;
                }
            }
        }
    }

    public string GetValue(string section, string key)
    {
        if (iniContent.ContainsKey(section) && iniContent[section].ContainsKey(key))
            return iniContent[section][key];
        return null;
    }

    // 以下、書き込みメソッドを追加
}

C#でiniファイルに書き込む

iniファイルへの書き込みは、読み取りよりも少し複雑です。既存の内容を保持しつつ、新しい値を追加または更新する必要があります。以下に、書き込み機能を追加したコードを示します:

public class IniFileHandler
{
    // 前述のコードに以下を追加

    public void SetValue(string section, string key, string value)
    {
        if (!iniContent.ContainsKey(section))
            iniContent[section] = new Dictionary<string, string>();
        
        iniContent[section][key] = value;
    }

    public void WriteIniFile(string filePath)
    {
        using (StreamWriter writer = new StreamWriter(filePath))
        {
            foreach (var section in iniContent)
            {
                writer.WriteLine($"[{section.Key}]");
                foreach (var kvp in section.Value)
                {
                    writer.WriteLine($"{kvp.Key}={kvp.Value}");
                }
                writer.WriteLine(); // セクション間に空行を挿入
            }
        }
    }
}

使用例

このクラスを使用して、iniファイルの読み取りと書き込みを行う例を示します:

class Program
{
    static void Main()
    {
        string iniFilePath = @"C:\path\to\your\file.ini";
        IniFileHandler handler = new IniFileHandler();

        // iniファイルを読み取る
        handler.ReadIniFile(iniFilePath);

        // 値を取得して表示
        Console.WriteLine($"Language: {handler.GetValue("AppSettings", "Language")}");
        Console.WriteLine($"Theme: {handler.GetValue("AppSettings", "Theme")}");

        // 新しい値を設定
        handler.SetValue("AppSettings", "Language", "English");
        handler.SetValue("UserPreferences", "FontSize", "14");

        // 変更をファイルに書き込む
        handler.WriteIniFile(iniFilePath);

        Console.WriteLine("iniファイルが更新されました。");
    }
}

注意点

  1. ファイルパスが正しいことを確認してください。
  2. ファイルへのアクセス権限があることを確認してください。
  3. 大規模なiniファイルの場合、メモリ使用量に注意が必要です。
  4. 実際の使用では、より堅牢なエラーハンドリングが必要です。

まとめ

C#でiniファイルの読み取りと書き込みを行う方法として、以下のポイントがあります:

  1. ファイルを1行ずつ読み込み、セクションとキー・値のペアを解析する。
  2. 解析したデータを適切なデータ構造(この場合は入れ子のDictionary)に保存する。
  3. 新しい値を設定する際は、データ構造を更新する。
  4. 書き込み時は、更新されたデータ構造全体をファイルに出力する。

これらの方法を使用することで、iniファイルを効率的に操作し、アプリケーションの設定管理を行うことができます。設定ファイルの管理や、レガシーシステムとの連携など、様々な場面で活用できるでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次