C++ INI檔案

來源:互聯網
上載者:User

C++ INI檔案

   INI檔案多用於儲存程式的初始化資訊。例如,記錄程式串連資料庫的名稱、上一次使用者登入的名稱、使用者的註冊資訊等。

一. INI 檔案格式

[Section1 Name]KeyName1=value1KeyName2=value2...... ......[Section2 Name]KeyName1=value1KeyName2=value2

  Section:節名;KeyName:鍵名;value:索引值。對於一個INI檔案,可以有多個節,每個節可以包含多個鍵。

二.讀寫INI檔案

1. GetPrivateProfileInt - 從INI檔案的指定Section 指定key 的整數值

GetPrivateProfileInt(LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址INT nDefault // 如果 Key 值沒有找到,則返回預設的值是多少LPCTSTR lpFileName // ini 檔案的檔案名稱);

2. GetPrivateProfileString - 從INI檔案的指定Section 指定key 的串值

GetPrivateProfileString(LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址LPCTSTR lpDefault, // 如果 Key 值沒有找到,則返回預設的字串的地址LPTSTR lpReturnedString, // 返回字串的緩衝區地址DWORD nSize // 緩衝區的長度LPCTSTR lpFileName // ini 檔案的檔案名稱);

3. GetPrivateProfileSection - 從INI檔案中讀出指定Section 的內容

GetPrivateProfileSection(LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址LPTSTR lpReturnedString, // 返回資料的緩衝區地址DWORD nSize // 返回資料的緩衝區長度LPCTSTR lpFileName // ini 檔案的檔案名稱);

4. GetPrivateProfileSectionNames - 從INI檔案中獲得所有Section資訊

GetPrivateProfileSectionNames(LPTSTR lpszReturnBuffer, // 返回資料的緩衝區地址DWORD nSize // 返回資料的緩衝區長度LPCTSTR lpFileName // ini 檔案的檔案名稱);

5. WritePrivateProfileSection - 將整個Section 的內容寫入INI檔案的指定Section中

WritePrivateProfileSection(LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址LPCTSTR lpString // 要寫入的資料的地址LPCTSTR lpFileName // ini 檔案的檔案名稱);

6. WritePrivateProfileString - 將指定Key的串值寫入INI檔案的指定Section中

WritePrivateProfileString(LPCTSTR lpAppName, // 指向包含 Section 名稱的字串地址LPCTSTR lpKeyName, // 指向包含 Key 名稱的字串地址LPCTSTR lpString // 要寫的字串地址LPCTSTR lpFileName // ini 檔案的檔案名稱);

三.應用

  在我們實際使用的時候,用的最多的是GetPrivateProfileString和WritePrivateProfileString,但在對自訂INI檔案操作的時候要注意的是,如果lpFileName指定的檔案不包含路徑資訊,API將預設為Windows 的安裝目錄而不是系統當前路徑,比較方便的方法是使用.\ xxx.ini 作為檔案名稱指示API操作對象為當前路徑下的xxx.ini檔案。

(1)儲存

void CRemoteMgrDlg::OnSave() {    // TODO: Add your control notification handler code here        CString IP_Save;    char inBuf[256];    char path[255] ;    m_CtrlIP.GetWindowText(IP_Save);                                                if(strcmp(IP_Save,m_IPData)!=0)                                            //IP地址有改變    {        GetCurrentDirectory(256,inBuf);                sprintf(path,"%s\\data.ini",inBuf);                                    //設定ini檔案的全路徑                WritePrivateProfileString("資訊","IP地址",IP_Save,path);        strcpy(m_IPData,IP_Save);        MessageBox("儲存成功!","提示");             }    }

(2)讀取載入

CString CRemoteMgrDlg::Data_Loading() {    char path[255] ;    char inBuf[256];    CString IP_Save;    GetCurrentDirectory(256,inBuf);            sprintf(path,"%s\\data.ini",inBuf);                                                    //設定ini檔案的全路徑        GetPrivateProfileString("資訊","IP地址","",IP_Save.GetBuffer(255),255,path);        //讀取資料    m_CtrlIP.SetWindowText(IP_Save);        m_CtrlPort.SetWindowText("8888");        strcpy(m_IPData,IP_Save);    return IP_Save;}

(3)刪除節名下的內容

  如果儲存的資料比較多,並且每次儲存的資料個數不定,可能會要求刪除這個節名的內容,然後再進行資料的儲存。

BOOL CRemoteMgrDlg::DelSection(LPCTSTR lpSection) {     char inBuf[256];    char path[255] ;    GetCurrentDirectory(256,inBuf);            sprintf(path,"%s\\data.ini",inBuf);        if(WritePrivateProfileString(lpSection,NULL,NULL,path))         return FALSE;     else         return GetLastError(); } 

(4)具有相同性質的數組類資料寫入

  可以先寫入這個數組的長度,然後for迴圈寫入數組的內容

BOOL CIniFile::Write(LPCSTR AppName, LPCSTR KeyName, LONG RowIndex, LPCSTR lpString){    CHAR    MKeyName[64];    sprintf(MKeyName,"%s_%ld",KeyName,RowIndex);    return Write(AppName,MKeyName,lpString);}BOOL CIniFile::Write(LPCSTR AppName, LPCSTR KeyName, LPCSTR lpString){    return WritePrivateProfileString(AppName, KeyName, lpString,m_FileName);}

(4)具有相同性質的數組類資料讀取

  可以先讀出這個數組的長度,然後for迴圈讀出數組的內容

DWORD CIniFile::Read(LPCSTR AppName, LPCSTR KeyName, LONG RowIndex, LPCSTR lpDefault, LPSTR ReturnedString, DWORD nSize){    CHAR    MKeyName[64];    sprintf(MKeyName,"%s_%ld",KeyName,RowIndex);    return Read(AppName,MKeyName,lpDefault,ReturnedString,nSize);}DWORD CIniFile::Read(LPCSTR AppName, LPCSTR KeyName, LPCSTR lpDefault, LPSTR ReturnedString, DWORD nSize){    return GetPrivateProfileString(AppName,KeyName,lpDefault,ReturnedString,nSize,m_FileName); }

   當然,對於資料的讀寫,也可以用普通檔案的方式來完成。

     

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.