首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 使用 WIN.INI 儲存應用程式設定:WriteProfileString 與 GetProfileInt 實戰

     編輯:關於C++

雖然 Microsoft 建議使用登錄表儲存應用程式設定,但對於少量簡單資料,WIN.INI 仍具備易讀、易手動編輯、易備份的優勢。C++ Builder 可直接呼叫 Win32 API WriteProfileString 與 GetProfileInt 實現 INI 檔案操作,無需額外類別封裝。

API 函數原型

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);
}

執行驗證

  1. 在 Edit1 輸入 3265,點擊「新增」。
  2. 執行 sysedit 查看 WIN.INI 尾部,將出現:
[範例程式]
項目=3265

方括號與等號由 API 自動加入。

  1. 點擊「查看」,Edit2 顯示 3265。
  2. 點擊「清除」,對應區段從 WIN.INI 移除。

進階:儲存多種資料型別

GetProfileInt 僅支援整數。若需儲存浮點數、布林值、字串,可採用以下策略:

  • 字串:直接用 WriteProfileString / GetProfileString (需自行載入 kernel32.dll 取得函數指標)。
  • 浮點數:轉為字串儲存,讀取時 StrToFloat。
  • 布林值:存 "1"/"0" 或 "True"/"False"。
  • 結構體/陣列:序列化為 JSON/XML/CSV 字串儲存。

何時選擇 WIN.INI vs 登錄表 vs XML/INI 元件

方案適用場景優點缺點
WIN.INI API極少量簡單設定、需手動編輯、跨版本相容零依賴、系統原生、易讀功能有限、非執行緒安全、大量資料效能差
TRegistry系統整合、大量結構化資料、安全性需求標準化、支援 ACL、效能佳不易手動編輯、註冊表膨脹風險
TIniFile / TMemIniFile應用程式專用設定檔、可攜式部署功能豐富、支援區段、型別轉換、執行緒安全需管理檔案路徑、部署時需攜帶檔案
XML/JSON複雜巢狀資料、跨平台、Web 整合表達力強、標準化、工具鏈豐富解析開銷大、過度設計簡單場景

最佳實踐建議

  • 新專案優先考慮 TMemIniFile (記憶體緩衝,UpdateFile 時寫入) 或 TIniFile,將設定檔置於應用程式目錄或 AppData。
  • 僅在維護舊專案、極簡單工具、或需與舊版共用設定時使用 WriteProfileString。
  • 避免在 WIN.INI 寫入大量資料,防止系統啟動變慢。

掌握 WriteProfileString/GetProfileInt 這對經典 API,能快速為舊專案或輕量工具添加持久化設定能力,也是理解 Windows 設定儲存演進歷程的絕佳切入點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved