雖然 Microsoft 建議使用登錄表儲存應用程式設定,但對於少量簡單資料,WIN.INI 仍具備易讀、易手動編輯、易備份的優勢。C++ Builder 可直接呼叫 Win32 API WriteProfileString 與 GetProfileInt 實現 INI 檔案操作,無需額外類別封裝。
BOOL WriteProfileString(
LPCTSTR lpAppName, // 區段名稱 [Section]
LPCTSTR lpKeyName, // 鍵名 Key
LPCTSTR lpString // 字串值 Value
);
UINT GetProfileInt(
LPCTSTR lpAppName, // 區段名稱
LPCTSTR lpKeyName, // 鍵名
INT nDefault // 找不到時的預設值
);
WriteProfileString("Section", NULL, NULL):刪除整個區段。WriteProfileString("Section", "Key", NULL):刪除特定鍵值行。表單放置:Edit1 (輸入值)、Edit2 (顯示讀取值)、三個 Button:
Button1 Caption="新增"Button2 Caption="查看"Button3 Caption="清除"// 新增/修改設定
void __fastcall TForm1::Button1Click(TObject *Sender) {
WriteProfileString("範例程式", "項目", Edit1->Text.c_str());
}
// 查看設定
void __fastcall TForm1::Button2Click(TObject *Sender) {
unsigned int Temp = GetProfileInt("範例程式", "項目", 100); // 預設值 100
Edit2->Text = IntToStr(Temp);
}
// 清除整個區段
void __fastcall TForm1::Button3Click(TObject *Sender) {
WriteProfileString("範例程式", NULL, NULL);
}
Edit1 輸入 3265,點擊「新增」。sysedit 查看 WIN.INI 尾部,將出現:[範例程式]
項目=3265
方括號與等號由 API 自動加入。
Edit2 顯示 3265。WIN.INI 移除。GetProfileInt 僅支援整數。若需儲存浮點數、布林值、字串,可採用以下策略:
WriteProfileString / GetProfileString (需自行載入 kernel32.dll 取得函數指標)。StrToFloat。| 方案 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| WIN.INI API | 極少量簡單設定、需手動編輯、跨版本相容 | 零依賴、系統原生、易讀 | 功能有限、非執行緒安全、大量資料效能差 |
| TRegistry | 系統整合、大量結構化資料、安全性需求 | 標準化、支援 ACL、效能佳 | 不易手動編輯、註冊表膨脹風險 |
| TIniFile / TMemIniFile | 應用程式專用設定檔、可攜式部署 | 功能豐富、支援區段、型別轉換、執行緒安全 | 需管理檔案路徑、部署時需攜帶檔案 |
| XML/JSON | 複雜巢狀資料、跨平台、Web 整合 | 表達力強、標準化、工具鏈豐富 | 解析開銷大、過度設計簡單場景 |
TMemIniFile (記憶體緩衝,UpdateFile 時寫入) 或 TIniFile,將設定檔置於應用程式目錄或 AppData。WriteProfileString。WIN.INI 寫入大量資料,防止系統啟動變慢。掌握 WriteProfileString/GetProfileInt 這對經典 API,能快速為舊專案或輕量工具添加持久化設定能力,也是理解 Windows 設定儲存演進歷程的絕佳切入點。