讀寫 INI 檔案

ASP.NET 寫久了, 早就習慣使用 Resource 檔案或一般 XML 檔案儲存設定, 反而不會考慮使用古早的 INI 檔案。但最近被問到一個問題: 「如果以前的程式都使用 INI 檔, 要如何跟人家一樣呢?」...

 

ASP.NET 寫久了, 早就習慣使用 Resource 檔案或一般 XML 檔案儲存設定, 反而不會考慮使用古早的 INI 檔案。但最近被問到一個問題: 「如果以前的程式都使用 INI 檔, 要如何跟人家一樣呢?」

於是我就花了一點功夫去研究, 沒想到解決異常的容易 - 呼叫 Win32 內建的功能就行了, 甚至不必寫程式去解析 INI 檔案的文字。以下就是寫好的現成檔案, 直接拿去用就行了。由於它過於簡單, 我想我就不用解說其邏輯了吧!

using System.Runtime.InteropServices;
.... 

class iniAccess
{
    public string iniFilePath = "./settings.ini";

    public void write(string Section, string Key, string Value, string iniFilePath)
    {
        this.iniFilePath = iniFilePath;
        write(Section, Key, Value);
    }

    public void write(string Section, string Key, string Value)
    {
        WritePrivateProfileString(Section, Key, Value, iniFilePath);
    }

    public string read(string Section, string Key, string iniFilePath)
    {
        this.iniFilePath = iniFilePath;
        return read(Section, Key);
    }

    public string read(string Section, string Key)
    {
        StringBuilder sb = new StringBuilder(255);
        int i = GetPrivateProfileString(Section, Key, string.Empty, sb, 255, iniFilePath);
        return sb.ToString();
    }

    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);

    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);
}

唯一值得注意的, 就是你不用另外去建立那個 INI 檔案; 你只需要直接去呼叫 write() 程序, 其餘的事它會全部做好。你要小心檔案路徑不要設定得太離譜就行了。

 


Dev 2Share @ 點部落