トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

C#/セクションが無いINIファイル読み取り

一部の情報は非常に古いもの(20年以上前〜)ですので、利用する際はご注意ください(Java 1.4 とか .NET 1.0 とか、Windows 2000 とか)
お問い合せは wiki@shise.net まで。Gmail に転送されるので、スパムは全部カットされます。


 

概要

セクションがあるiniファイルは API 使うなり何なりで読み込めますが、
たまにセクションの無いファイルを扱う必要が出てきたりします。

セクションの項目のところに、null とか、String.Empty とか突っ込んでも、
セクションが無いiniの設定が読み込めませんでした。(やり方が悪い?)

で、
そのセクション無しのiniファイルを読み込むためのコードです。
必要な時に、毎回書くのもアレなので、めもめも。

コード

public static string read2(string key, string def, string file)
{
    string keysmall = key.ToLower().Trim();
    string[] lines = null;

    file = Path.GetFullPath(file);
    if (file.Equals(inicacheName))
    {
        lines = inicache;
    }
    else
    {
        lines = File.ReadAllLines(file, Encoding.Default);
        //lines = readAllLines(file, Encoding.Default);
        inicache = lines;
        inicacheName = file;
    }

    foreach (string var in lines)
    {
        if (var.Trim().Length == 0 || var[0].Equals('#'))
        {
            continue;
        }

        string varsmall = var.ToLower().Trim();
        if (varsmall.StartsWith(keysmall))
        {
            string[] result = var.Split(new char[] { '=' }, 2);
            if (result.Length < 2)
            {
                return def;
            }
            result[1] = result[1].Trim();
            if (result[1].Length == 0)
            {
                return def;
            }
            return result[1];
        }
    }

    return def;
}

public static string inicacheName = null;
public static string[] inicache = null;


public static string[] readAllLines(string file, Encoding enc)
{
    using (StreamReader reader = new StreamReader(file, enc))
    {
        System.Collections.ArrayList list = new System.Collections.ArrayList();

        string line;
        while ((line = reader.ReadLine()) != null)
        {
            list.Add(line);
        }
        return (string[])list.ToArray(typeof(string));
    }
}