兩種檔案配置項設定方法及C程式處理的比較

來源:互聯網
上載者:User

標籤:style   http   color   ar   for   sp   檔案   資料   on   

        在實際的軟體開發項目中,程式經常需要從外界讀取某些可能會變化的資訊,我們把需要讀取的資訊統一放到一個檔案中(通常是ini檔案),並把這個檔案叫做設定檔。

        考慮這樣一個情境,程式需要與多個資料庫打交道,要從設定檔中讀取各個資料庫的資訊。那麼,我們如何在設定檔中設定各個配置項以及如何編寫程式將各配置項的值讀入呢?

        假設有兩個資料庫,每個資料庫包含了IP地址和連接埠號碼兩種資訊。那麼,設定檔中配置項的設定有如下兩種形式:

        (1)  形式一:

[GENERAL]

; database count

DBNum=2

 

[DBINFO1]

IPAddress=

Port=

 

[DBINFO2]

IPAddress=

Port=

 

          (2)  形式二:

[DBINFO]

; database count

DBNum=2

 

; Info of database1

IPAddress1=

Port1=

 

; Info of database2

IPAddress2=

Port2=

 

        在形式一中,首先在[GENERAL]配置段裡面設定資料庫的個數,之後在[DBINFO1]和[DBINFO2]中設定具體的資料庫資訊。

        在形式二中,資料庫的資訊就放在[DBINFO]配置段裡面。在該配置段下,首先設定資料庫的個數,然後是每個資料庫的具體資訊。

        讀取這兩種形式的配置項值的C程式碼如下:

        (1)  形式一:

……

#define   MAX_DB_NUM  (10)  // 最大資料庫個數,用於限制配置的資料庫的個數

int g_DBNum = 0;                      // 全域變數,用於表示配置的資料庫的個數

 

// 資料庫資訊結構體

typedef struct

{

    char szIPAddress[128];      // IP地址

    int    iPort;                              // 連接埠號碼

}T_DBInfo;

T_DBInfo g_tDBInfo[MAX_DB_NUM] = {0};  // g_tDBInfo用於存放資料庫的具體資訊

……

g_DBNum = GetPrivateProfileInt("GENERAL", "DBNum",1, szIniFile);  // szIniFile中存放設定檔名

for (iLoopFlag = 0; iLoopFlag < g_DBNum; iLoopFlag ++)

{

    memset(szDBSectName,0x00, sizeof(szDBSectName));

    _snprintf(szDBSectName,sizeof(szDBSectName)-1, "DBINFO%d", (iLoopFlag+1));

 

     // 讀取IP地址

    GetPrivateProfileString(szDBSectName, "IPAddress","", g_tDBInfo[iLoopFlag].szIPAddress, sizeof(g_tDBInfo[iLoopFlag].szIPAddress),szIniFile);

 

    // 讀取連接埠號碼

    g_tDBInfo[iLoopFlag].iPort = GetPrivateProfileInt(szDBSectName,"Port", 9999, szIniFile);

}

 

         (2)  形式二:

    ……

#define   MAX_DB_NUM  (10)  // 最大資料庫個數,用於限制配置的資料庫的個數

int g_DBNum = 0;                       // 全域變數,用於表示配置的資料庫的個數

 

// 資料庫資訊結構體

typedef struct

{

    char szIPAddress[128];      // IP地址

    int     iPort;                             // 連接埠號碼

}T_DBInfo;

T_DBInfo g_tDBInfo[MAX_DB_NUM] = {0};       // g_tDBInfo用於存放資料庫的具體資訊

……

g_DBNum = GetPrivateProfileInt("DBINFO", "DBNum",1, szIniFile);  // szIniFile中存放設定檔名

for (iLoopFlag = 0; iLoopFlag < g_DBNum; iLoopFlag ++)

{

    // 讀取IP地址

    memset(szDBSectName, 0x00, sizeof(szDBSectName));

    _snprintf(szDBSectName,sizeof(szDBSectName)-1, "IPAddress%d", (iLoopFlag+1));

    GetPrivateProfileString(“DBINFO”, szDBSectName, "", g_tDBInfo[iLoopFlag].szIPAddress,sizeof(g_tDBInfo[iLoopFlag].szIPAddress), szIniFile);

 

    // 讀取連接埠號碼

    memset(szDBSectName, 0x00, sizeof(szDBSectName));

    _snprintf(szDBSectName,sizeof(szDBSectName)-1, " Port%d", (iLoopFlag+1));

    g_tDBInfo[iLoopFlag].iPort = GetPrivateProfileInt(“DBINFO”, szDBSectName,9999, szIniFile);

}

 

         在實際項目中,以上兩種形式的配置項設定方法都會用到,大家要根據項目組的要求、程式特點等進行合理的選擇。



(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,號:245924426,歡迎關注!)

兩種檔案配置項設定方法及C程式處理的比較

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.