codefans

          導航

          <2013年7月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          程序設計鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          在VC++中讀寫INI文件

            在我們寫的程序當中,總有一些配置信息需要保存下來,以便完成程序的功能,最簡單的辦法就是將這些信息寫入INI文件中,程序初始化時再讀入.具體應用如下:

            一.將信息寫入.INI文件中.

            1.所用的WINAPI函數原型為:

          BOOL WritePrivateProfileString(
          LPCTSTR lpAppName,
          LPCTSTR lpKeyName,
          LPCTSTR lpString,
          LPCTSTR lpFileName
          );

            其中各參數的意義:

             LPCTSTR lpAppName 是INI文件中的一個字段名.

             LPCTSTR lpKeyName 是lpAppName下的一個鍵名,通俗講就是變量名.

             LPCTSTR lpString 是鍵值,也就是變量的值,不過必須為LPCTSTR型或CString型的.

             LPCTSTR lpFileName 是完整的INI文件名.

            2.具體使用方法:設現有一名學生,需把他的姓名和年齡寫入 c:\stud\student.ini 文件中.

          CString strName,strTemp;
          int nAge;
          strName="張三";
          nAge=12;
          ::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");

            此時c:\stud\student.ini文件中的內容如下:

             [StudentInfo]
             Name=張三

            3.要將學生的年齡保存下來,只需將整型的值變為字符型即可:

          strTemp.Format("%d",nAge);
          ::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");

           二.將信息從INI文件中讀入程序中的變量.

            1.所用的WINAPI函數原型為:

          DWORD GetPrivateProfileString(
          LPCTSTR lpAppName,
          LPCTSTR lpKeyName,
          LPCTSTR lpDefault,
          LPTSTR lpReturnedString,
          DWORD nSize,
          LPCTSTR lpFileName
          );

            其中各參數的意義:

             前二個參數與 WritePrivateProfileString中的意義一樣.

             lpDefault : 如果INI文件中沒有前兩個參數指定的字段名或鍵名,則將此值賦給變量.

             lpReturnedString : 接收INI文件中的值的CString對象,即目的緩存器.

             nSize : 目的緩存器的大小.

             lpFileName : 是完整的INI文件名.

            2.具體使用方法:現要將上一步中寫入的學生的信息讀入程序中.

          CString strStudName;
          int nStudAge;
          GetPrivateProfileString("StudentInfo","Name","默認姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");

            執行后 strStudName 的值為:"張三",若前兩個參數有誤,其值為:"默認姓名".

            3.讀入整型值要用另一個WINAPI函數:

          UINT GetPrivateProfileInt(
          LPCTSTR lpAppName,
          LPCTSTR lpKeyName,
          INT nDefault,
          LPCTSTR lpFileName
          );

            這里的參數意義與上相同.使用方法如下:

          nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");


           三.循環寫入多個值,設現有一程序,要將最近使用的幾個文件名保存下來,具體程序如下:

            1.寫入:

          CString strTemp,strTempA;
          int i;
          int nCount=6;
          file://共有6個文件名需要保存
          for(i=0;i {strTemp.Format("%d",i);
          strTempA=文件名;
          file://文件名可以從數組,列表框等處取得.
          ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,
          "c:\\usefile\\usefile.ini");
          }
          strTemp.Format("%d",nCount);
          ::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");
          file://將文件總數寫入,以便讀出.

            2.讀出:

          nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");
          for(i=0;i {strTemp.Format("%d",i);
          strTemp="FileName"+strTemp;
          ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");

          file://使用strTempA中的內容.

          }

            補充四點:

             1.INI文件的路徑必須完整,文件名前面的各級目錄必須存在,否則寫入不成功,該函數返回 FALSE 值.

             2.文件名的路徑中必須為 \\ ,因為在VC++中, \\ 才表示一個 \ .

             3.也可將INI文件放在程序所在目錄,此時 lpFileName 參數為: ".\\student.ini".

             4.從網頁中粘貼源代碼時,最好先粘貼至記事本中,再往VC中粘貼,否則易造成編譯錯誤,開始時我也十分不解,好好的代碼怎么就不對呢?后來才找到這個方法.還有一些代碼中使用了全角字符如:<,\等,也會
          造成編譯錯誤.

          posted on 2005-08-05 10:39 春雷的博客 閱讀(12985) 評論(2)  編輯  收藏

          評論

          # re: 在VC++中讀寫INI文件 2013-07-10 11:50 C++Lover

          謝謝指教。  回復  更多評論   

          # re: 在VC++中讀寫INI文件 2015-02-04 16:09 dasjfoais

           我記得小的時候經歷過離奇般的童話故事。這是在小說中會發生的事情卻降臨在我的身上,我也不想不到,一切都是如此的離奇。

            我們是很要好的伙伴,小的時候,根本不懂什么叫男女有別,只知道,我喜歡和他玩,家在海邊,我們常常會去那海邊,在那里建我們的城堡沙雕。過我們的王子與公主的生活,更實在的說是過家家九。這是多么簡單的童年,可是,時間可以培養感情,我們形影不離。有時候,大人還會拿我們開玩笑,說多么像對小兩口。可是我們之間是那種十分單純的愛。我們只知道,我們在一起,我們找到的是快樂……

            可是在我8歲那年,父母因為要掉離到離這邊很遠很遠的鄉鎮。我們不得不也跟著走,我記得哪天,他哭著送我走的,而我卻一言不發…。他給了我一海螺。,我平靜的拿過,他告訴我,把海螺放在耳邊就能聽到海的呼喚,他等我回來……我聽完這話后,也哭了:”我會回來的…”車開了,他在背后奔跑著。我在車內揮舞著手…

            今年我回去了,可是我沒有去找他,只是遠遠的忘著他。他變了,變得讓人覺得剛強。不再是那個愛哭的小男孩,不知道他是否還記得我說過我會回來,他說過要我一定要回來。。可是如今的這些都已經不重要了。我相信如今的這些已經成為我們心中彼此的期待,何必打破海螺里的平靜,或許,這樣,在彼此的心目中都是如此的完美…

            我漫步在海邊,可是如今的我怎么堆也堆不起沙雕。。我蹲在海邊哭了。。海水不知趣的潑在我的臉上,我站起來,看見了他…。。可是,我們就這樣插身而過了,他只很平靜的回過頭來望了望我,皺了皺眉而已…我不知道他是想起我了,還是覺得一個傻姑娘在海邊哭泣很奇怪…。

            我蹲在那里很久很久,靜靜的看著他撿起一個海螺,走了…海風吹呀吹,把我的記憶吹走了。如今的你是否也在想著我?

            我把小時候那單純的感情裝在海螺里拋入了大海,我們的起源在大海,結束也在大海,大海見證了曾經有兩個兩小無猜的孩子,在這別建他們的碉堡,曾在這邊許諾會回來。。我回來了,只不過我們擦身而過而已。。

            你知道嗎?!我信守了承諾。。我有回來,不知你知道不知道。

            回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 威海市| 巴东县| 罗江县| 昭平县| 延吉市| 六枝特区| 射洪县| 东莞市| 扎囊县| 永德县| 临澧县| 六盘水市| 广昌县| 泰来县| 桃园市| 文登市| 双辽市| 凤凰县| 巴彦县| 修文县| 汤原县| 连州市| 迁西县| 昌都县| 鹿泉市| 巫山县| 禄劝| 厦门市| 兴仁县| 拜城县| 古浪县| 珲春市| 松原市| 临邑县| 垫江县| 阳西县| 华蓥市| 铅山县| 翁牛特旗| 乌鲁木齐县| 平度市|