INI文件的创建与读取方法

来源:互联网 发布:北大mba课程书籍 知乎 编辑:程序博客网 时间:2024/04/20 14:08
          ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。

一、向ini文件中写入信息的函数

     1. 把信息写入系统的win.ini文件

         BOOL WriteProfileString(
            LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串
            LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
            LPCTSTR lpString   // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
             )



   2. 把信息写入自己定义的.ini文件
        BOOL WritePrivateProfileString(
            LPCTSTR lpAppName,      // 同上
            LPCTSTR lpKeyName,      // 同上
            LPCTSTR lpString,       // 同上
            LPCTSTR lpFileName      // 要写入的文件的文件名。相对或绝度路径
           )



   3.例用例
        ::WriteProfileString("Test","id","xyz"); 
          //在win.ini中创建一个Test节,并在该节中创建一个键id,其值为xyz


       ::WritePrivateProfileString("Test","id","xyz","d://vc//Ex1//ex1.ini");
          //在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xyz


        //若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为:
       ::WritePrivateProfileString("Test","id","xym",".//ex1.ini");

二、从ini文件中读取数据的函数
      1、从系统的win.ini文件中读取信息
          (I) 读取字符串
         DWORD GetProfileString(
            LPCTSTR lpAppName,            // 节名
            LPCTSTR lpKeyName,            // 键名,读取该键的值
            LPCTSTR lpDefault,            // 若指定的键不存在,该值作为读取的默认值
            LPTSTR lpReturnedString,      // 一个指向缓冲区的指针,接收读取的字符串
            DWORD nSize                   // 指定lpReturnedString指向的缓冲区的大小
        )
      CString str;
      ::GetProfileString("Test","id","Error",str.GetBuffer(20),20);


       (II) 读取整数

          UINT GetProfileInt(
                    LPCTSTR lpAppName,      // 同上
                    LPCTSTR lpKeyName,      // 同上
                    INT nDefault            // 若指定的键名不存在,该值作为读取的默认值
                     )

       如使用以下语句写入了年龄信息:
       ::WriteProfileString("Test","age","25"); 
       //在win.ini中创建一个Test节,并在该节中创建一个键age,其值为25
       
       
       则可用以下语句读取age键的值:
       int age;
       age=::GetProfileInt("Test","age",0);


     2、从自己的ini文件中读取信息
        (I) 读取字符串
             DWORD GetPrivateProfileString(
                          LPCTSTR lpAppName,            // 同1(1)
                          LPCTSTR lpKeyName,            // 同1(1)
                          LPCTSTR lpDefault,            // 同1(1)
                          LPTSTR lpReturnedString,      // 同1(1)
                          DWORD nSize,                  // 同1(1)
                          LPCTSTR lpFileName            // 读取信息的文件名。相对路径/绝度路径。
             )

        如:
        CString str;
        ::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,".//ex1.ini");
          或:
        ::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,"d://vc//Ex1//ex1.ini");

       (II) 读取整数
      UINT GetPrivateProfileInt(
               LPCTSTR lpAppName,      // 同上
               LPCTSTR lpKeyName,      // 同上
               INT nDefault,           // 若指定的键名不存在,该值作为读取的默认值
               LPCTSTR lpFileName      // 同上
      )


     如使用以下语句写入了年龄信息:
     ::WritePrivateProfileString("Test","age","25",".//ex1.ini"); 
     //在ex1.ini中创建一个Test节,并在该节中创建一个键age,其值为25
     
     则可用以下语句读取age键的值:
     int age;
     age=::GetPrivateProfileInt("Test","age",0,".//ex1.ini");



三、 删除键值或节


       WriteProfileString函数的说明
             BOOL WriteProfileString(
                                LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串
                                LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
                                LPCTSTR lpString       // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
                          )



       要删除某个节,只需要将WriteProfileString第二个参数设为NULL即可。而要删除某个键,则只需要将该函数的第三个参数设为 NULL即可。这是删除系统的win.ini中的节或键,类似的,要删除自己定义的ini文件中的节或键,也可做相同的操作。


       ::WriteProfileString("Test",NULL,NULL);      //删除win.ini中的Test节
       ::WriteProfileString("Test","id",NULL);      //删除win.ini中的id键


       ::WritePrivateProfileString("Test",NULL,NULL,".//ex1.ini");      //删除ex1.ini中的Test节
       ::WritePrivateProfileString("Test","id",NULL,".//ex1.ini");      //删除ex1.ini中的id键


四、如何判断一个ini文件中有多少个节

       要判断一个ini文件中有多少个节,最简单的办法就是将所有的节名都找出来,然后统计节名的个数。而要将所有的节名找出来,使用GetPrivateProfileSectionNames函数就可以了,其原型如下:


    DWORD GetPrivateProfileSectionNames(
                        LPTSTR lpszReturnBuffer,      // 指向一个缓冲区,用来保存返回的所有节名
                        DWORD nSize,                  // 参数lpszReturnBuffer的大小
                        LPCTSTR lpFileName            // 文件名,相对路径/绝度路径
                        )


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 棉质短袖衫缩水怎么办 纯棉t恤缩水了怎么办 t恤缩水变小了怎么办 衣服掉在雨棚上怎么办 车衣密码锁忘记密码怎么办 衣服的铁拉链弯怎么办 去旅行衣服皱了怎么办 衣服抽绳出来了怎么办 裤子的绑带掉了怎么办 网纱裙的边卷了怎么办 堵奶宝宝吸不通怎么办 棉麻裙子掉毛怎么办 10个月宝宝吃手怎么办 婴儿连体衣长了怎么办 冰丝面料变长了怎么办 t恤袖口大了怎么办 长袖t恤袖子长了怎么办 机打的扣子掉了怎么办 四个月宝宝头扁怎么办 鞋子前面穿翘了怎么办 休完产假没人带怎么办 休完产假孩子吃奶怎么办 巴布豆童鞋里面臭了到底怎么办 连体裤有点卡档怎么办 宝宝连体衣扣子掉了怎么办 买衣服被骂了怎么办? 把人车刮了跑了怎么办 打工打不下去了怎么办 白色衣服变粉了怎么办 一量血压就紧张怎么办 一紧张就血压高怎么办 不在上班时间在单位受伤怎么办 生活过得太压抑怎么办 高低床踏板断了怎么办 高低床 孩子摔下来怎么办 小孩子太小高低床爬梯怎么办 辞职后单位不发工资怎么办 买了个上下床搬家怎么办 爸妈不让学日语怎么办 把共享单车弄坏了怎么办 裙子沾到单车油怎么办?