Back to Top

プログラムの覚書

Category: ファイル

C# INIファイルの読み込み・書き込み

C#にてINIファイルの読み込み・書き込み方法を説明します。

INIファイルは、単純なテキストファイルなので、テキストエディタで編集することも出来ます。

自作のアプリケーションの設定ファイルなどにも使用することも出来ます。

ここでは、Win32APIを使用して読み書きする方法を記載します。

INIクラス IniFilesクラス を作成して、それを呼び出す方法で説明します。

INIファイル読み込み・書き込みクラス

KERNEL32.DLLを読み込み、APIをコールすることにより読み書きします。

/// <summary>
/// INIファイルの読み書きクラス
/// </summary>
class IniFiles
{
    [DllImport("KERNEL32.DLL")]
    private static extern uint GetPrivateProfileString(
        string lpAppName,
        string lpKeyName,
        string lpDefault,
        StringBuilder lpReturnedString,
        uint nSize,
        string lpFileName);

    [DllImport("KERNEL32.DLL")]
    private static extern uint GetPrivateProfileInt(
        string lpAppName,
        string lpKeyName,
        int nDefault,
        string lpFileName);

    [DllImport("KERNEL32.DLL")]
    private static extern uint WritePrivateProfileString(
        string lpAppName,
        string lpKeyName,
        string lpString,
        string lpFileName);


    /// <summary>
    /// INIファイルから値を取得する
    /// </summary>
    /// <param name="lpSection">セッション名称</param>
    /// <param name="lpKeyName">キー名称</param>
    /// <param name="lpFileName">INIファイル名</param>
    /// <returns></returns>
    public static string GetIniString(string lpSection, string lpKeyName, string lpFileName)
    {
        System.Text.StringBuilder strValue = new System.Text.StringBuilder(1024);

        uint sLen = GetPrivateProfileString(lpSection, lpKeyName, "", strValue, 1024, lpFileName);

        return strValue.ToString();
    }

    /// <summary>
    /// INIファイルに値を書き込む
    /// </summary>
    /// <param name="lpSection">セッション名称</param>
    /// <param name="lpKeyName">キー名称</param>
    /// <param name="lpValue">セットする値</param>
    /// <param name="lpFileName">INIファイル名</param>
    /// <returns></returns>
    public static bool PutIniString(string lpSection, string lpKeyName, string lpValue, string lpFileName)
    {
        long result = WritePrivateProfileString(lpSection, lpKeyName, lpValue, lpFileName);
        return result != 0;
    }
}

呼び出し側

private void button1_Click(object sender, EventArgs e)
{
    string FilePath = @"C:\work\MyFile.ini";

    string s = IniFiles.GetIniString("Section1", "KEY1", FilePath);
    IniFiles.PutIniString("Section2", "KEY1", "AAAA", FilePath);
}

 

 

C# シーケンシャルファイル

C#にてシーケンシャル読み込み・書き込みの方法を説明します。

シーケンシャルファイルを読み書きするには、幾つかの方法がありますが、StreamReader ・ StreamWriter を使用する方法を記載します。

シーケンシャル読み込み

string inFilePath = @"C:\work\myfile.txt";

List<string> dtList = new List<string>();

try
{
    using (System.IO.StreamReader sr = new System.IO.StreamReader(inFilePath, System.Text.Encoding.GetEncoding("Shift_JIS")))
    {
        while (!sr.EndOfStream)
        {
            dtList.Add(sr.ReadLine());
        }
        sr.Close();     //usingの場合Closeは必ずしも必要ではない
    }
}
catch (Exception e)
{
}

 

シーケンシャル書き込み

string outFilePath = @"C:\work\myfile.txt";
   
List<string> dtList = new List<string>();

データの設定・・・

try
{
    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(outFilePath, false, System.Text.Encoding.GetEncoding("Shift_JIS")))
    {
        foreach (string s in dtList)
        {
            sw.WriteLine(s);
        }
        sw.Close();         //usingの場合Closeは必ずしも必要ではない
    }
}
catch (Exception e)
{
}