INI 檔案作為輕量級設定檔,在 Windows 應用程式中廣泛使用。雖然 ASP.NET 主要採用 Web.config,但在某些情境下(如與傳統桌面程式共用設定、簡單部署需求)仍需讀寫 INI。本文示範如何在 ASP.NET 中透過 P/Invoke 呼叫 Windows API 實作 INI 檔案讀寫封裝類別,並提供完整的呼叫範例。
利用 kernel32.dll 中的 WritePrivateProfileString 與 GetPrivateProfileString 兩個 API 函數,建立一個可重複使用的 INIFile 類別:
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace CreateWebDir
{
public class INIFile
{
public string Path { get; private set; }
public INIFile(string iniPath)
{
Path = iniPath;
}
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
/// 寫入指定區段與鍵值
public void IniWriteValue(string section, string key, string value)
{
WritePrivateProfileString(section, key, value, this.Path);
}
/// 讀取指定區段與鍵值,若不存在回傳空字串
public string IniReadValue(string section, string key)
{
StringBuilder temp = new StringBuilder(255);
GetPrivateProfileString(section, key, "", temp, 255, this.Path);
return temp.ToString();
}
}
}
在 Page_Load 中檢查檔案是否存在,不存在則建立,接著批次寫入測試資料:
using System;
using System.IO;
using CreateWebDir;
public partial class user_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string iniFile = @"F:\test\test.ini";
// 確保目錄與檔案存在
if (!File.Exists(iniFile))
{
using (FileStream fs = File.Create(iniFile)) { }
}
INIFile myINI = new INIFile(iniFile);
for (int i = 0; i < 10; i++)
{
string val = Convert.ToString(i + i * i * i);
myINI.IniWriteValue("WebDir", "arg" + i, val);
}
}
}
另一個頁面專門負責讀取並顯示特定鍵值:
using System;
using CreateWebDir;
public partial class user_Read : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
INIFile ini = new INIFile(@"F:\test\test.ini");
Response.Write(ini.IniReadValue("WebDir", "arg5"));
}
}
ConfigurationManager 搭配 appSettings 或自訂 ConfigurationSection,僅在相容舊系統時使用 INI。透過 P/Invoke 封裝 Windows API,即可在 ASP.NET 中輕鬆操作 INI 檔案。本文提供的 INIFile 類別結構清晰、易於擴充,可直接套用於實際專案中。