C語言讀取INI配置文件.doc_第1頁
C語言讀取INI配置文件.doc_第2頁
C語言讀取INI配置文件.doc_第3頁
C語言讀取INI配置文件.doc_第4頁
C語言讀取INI配置文件.doc_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言讀取INI配置文件Ini.h#pragma once#include afxTempl.hclass DLLPORT CIniprivate:CString m_strFileName;public:CIni(CString strFileName) :m_strFileName(strFileName)public:/一般性操作:BOOL SetFileName(LPCTSTR lpFileName); /設(shè)置文件名CString GetFileName(void); /獲得文件名BOOL SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue, bool bCreate = true); /設(shè)置鍵值,bCreate是指段名及鍵名未存在時,是否創(chuàng)建。CString GetValue(LPCTSTR lpSection, LPCTSTR lpKey); /得到鍵值.BOOL DelSection(LPCTSTR strSection); /刪除段名BOOL DelKey(LPCTSTR lpSection, LPCTSTR lpKey); /刪除鍵名public:/高級操作:int GetSections(CStringArray& arrSection); /枚舉出全部的段名int GetKeyValues(CStringArray& arrKey, CStringArray& arrValue, LPCTSTR lpSection); /枚舉出一段內(nèi)的全部鍵名及值BOOL DelAllSections();/*使用方法:CIni ini(c:a.ini);int n;/*獲得值TRACE(%s,ini.GetValue(段1,鍵1);*/*添加值ini.SetValue(自定義段,鍵1,值);ini.SetValue(自定義段2,鍵1,值,false);*/*枚舉全部段名CStringArray arrSection;n=ini.GetSections(arrSection);for(int i=0;in;i+)TRACE(%sn,arrSectioni);*/*枚舉全部鍵名及值CStringArray arrKey,arrValue;n=ini.GetKeyValues(arrKey,arrValue,段1);for(int i=0;in;i+)TRACE(鍵:%sn值:%sn,arrKeyi,arrValuei);*/*刪除鍵值ini.DelKey(段1,鍵1);*/*刪除段ini.DelSection(段1);*/*刪除全部ini.DelAllSections();*/Ini.cpp#include StdAfx.h#include Ini.h#define MAX_ALLSECTIONS 2048 /全部的段名#define MAX_SECTION 260 /一個段名長度#define MAX_ALLKEYS 6000 /全部的鍵名#define MAX_KEY 260 /一個鍵名長度BOOL CIni:SetFileName(LPCTSTR lpFileName)CFile file;CFileStatus status;if (!file.GetStatus(lpFileName, status)return TRUE;m_strFileName = lpFileName;return FALSE;CString CIni:GetFileName(void)return m_strFileName;BOOL CIni:SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue, bool bCreate)TCHAR lpTempMAX_PATH = 0 ;/以下if語句表示如果設(shè)置bCreate為false時,當(dāng)沒有這個鍵名時則返回TRUE(表示出錯)/!*&*none-value*&!* 這是個垃圾字符沒有特別意義,這樣亂寫是防止湊巧相同。if (!bCreate)GetPrivateProfileString(lpSection, lpKey, !*&*none-value*&!*, lpTemp, MAX_PATH, m_strFileName);if (strcmp(lpTemp, !*&*none-value*&!*) = 0)return TRUE;if (WritePrivateProfileString(lpSection, lpKey, lpValue, m_strFileName)return FALSE;elsereturn GetLastError();CString CIni:GetValue(LPCTSTR lpSection, LPCTSTR lpKey)DWORD dValue;TCHAR lpValueMAX_PATH = 0 ;dValue = GetPrivateProfileString(lpSection, lpKey, , lpValue, MAX_PATH, m_strFileName);return lpValue;BOOL CIni:DelSection(LPCTSTR lpSection)if (WritePrivateProfileString(lpSection, NULL, NULL, m_strFileName)return FALSE;elsereturn GetLastError();BOOL CIni:DelKey(LPCTSTR lpSection, LPCTSTR lpKey)if (WritePrivateProfileString(lpSection, lpKey, NULL, m_strFileName)return FALSE;elsereturn GetLastError();int CIni:GetSections(CStringArray& arrSection)/*本函數(shù)基礎(chǔ):GetPrivateProfileSectionNames - 從 ini 文件中獲得 Section 的名稱如果 ini 中有兩個 Section: sec1 和 sec2,則返回的是 sec1,0,sec2,0,0 ,當(dāng)你不知道ini 中有哪些 section 的時候可以用這個 api 來獲取名稱*/int i;int iPos = 0;int iMaxCount;TCHAR chSectionNamesMAX_ALLSECTIONS = 0 ; /總的提出來的字符串TCHAR chSectionMAX_SECTION = 0 ; /存放一個段名。GetPrivateProfileSectionNames(chSectionNames, MAX_ALLSECTIONS, m_strFileName);/以下循環(huán),截斷到兩個連續(xù)的0for (i = 0; iMAX_ALLSECTIONS; i+)if (chSectionNamesi = 0)if (chSectionNamesi = chSectionNamesi + 1)break;iMaxCount = i + 1; /要多一個0號元素。即找出全部字符串的結(jié)束部分。arrSection.RemoveAll();/清空原數(shù)組for (i = 0; iiMaxCount; i+)chSectioniPos+ = chSectionNamesi;if (chSectionNamesi = 0)arrSection.Add(chSection);memset(chSection, 0, MAX_SECTION);iPos = 0;return (int)arrSection.GetSize();int CIni:GetKeyValues(CStringArray& arrKey, CStringArray& arrValue, LPCTSTR lpSection)/*本函數(shù)基礎(chǔ):GetPrivateProfileSection- 從 ini 文件中獲得一個Section的全部鍵名及值名如果ini中有一個段,其下有 段1=值1 段2=值2,則返回的是 段1=值1,0,段2=值2,0,0 ,當(dāng)你不知道獲得一個段中的所有鍵及值可以用這個。*/int i;int iPos = 0;CString strKeyValue;int iMaxCount;TCHAR chKeyNamesMAX_ALLKEYS = 0 ; /總的提出來的字符串TCHAR chKeyMAX_KEY = 0 ; /提出來的一個鍵名GetPrivateProfileSection(lpSection, chKeyNames, MAX_ALLKEYS, m_strFileName);for (i = 0; iMAX_ALLKEYS; i+)if (chKeyNamesi = 0)if (chKeyNamesi = chKeyNamesi + 1)break;iMaxCount = i + 1; /要多一個0號元素。即找出全部字符串的結(jié)束部分。arrKey.RemoveAll();/清空原數(shù)組arrValue.RemoveAll();for (i = 0; iiMaxCount; i+)chKeyiPos+ = chKeyNamesi;if (chKeyNamesi = 0)strKeyValue = chKey;arrKey.Add(strKeyValue.Left(strKeyValue.Find(=);arrValue.Add(strKeyValue.Mid(strKeyValue.Find(=) + 1);memset(chKey, 0, MAX_KEY);iPos = 0;re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論