zoukankan      html  css  js  c++  java
  • VC中读写ini文件

    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中粘贴,否则易造成编译错误,开始时我也十分不解,好好的代码怎么就不对呢?后来才找到这个方法.还有一些代码中使用了全角字符如:<,\等,也会造成编译错误.
    VB没有直接读写INI文件的语句,必须借助Windows API来操作INI文件。相应的Windows API函数有两类:一类是GetProfileInt、GetProfileString、WriteProfileInt和 WriteProfileString,它们是读写Win.ini中的设置;另一类是GetPrivateProfileInt、 GetPrivateProfileString、WritePrivateProfileInt和 WritePrivateProfileString,它们可以读写如何一个.ini文件。这些函数的声明都在Win32api.txt中找到。先在VB 中建立一个模块,输入以下代码:
    Declare Function GetPrivateProfileString Lib "kernel32" _
    Alias "GetPrivateProfileStringA" (ByVal lpApplicationName _
    As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, ByVal nSize As Long, _
    ByVal lpFileName As String) As Long
    Declare Function WritePrivateProfileString Lib "kernel32" _
    Alias "WritePrivateProfileStringA" (ByVal lpApplicationName _
    As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
    ByVal lpFileName As String) As Long
    下面的例子将从njcom.ini中读取NJStar Communicator的目录。
    Dim s As String * 256
    GetPrivateProfileString "NJCOM Options", _
    "Home Directory", "", s, 256, "njcom.ini"
    Label1.Caption = s
    下面的例子将利用WritePrivateProfileString删除掉njcom.ini中Home Directory设置。这里我们的第三个参数不是通常的字符串,而是0&,这里你可以看到我们在声明参数类型时使用As Any的好处。
    WritePrivateProfileString "NJCOM Options", _
    "Home Directory", 0&, "njcom.ini"
  • 相关阅读:
    CSS 专业技巧
    MyBatisPlus大于等于、小于等于等等函数
    最新国内手机号校验正则表达式
    前端自动化测试----百度搜索功能实战
    pytest:数据驱动;结合allure生成测试报告
    pytest:参数化用例
    pytest:多线程并行和分布式执行;结合pytest-html生成测试报告
    pytest:自动执行fixture;fixture传递参数
    pytest:conftest.py文件
    pytest:通过scope控制fixture的作用范围
  • 原文地址:https://www.cnblogs.com/flyingspark/p/2498518.html
Copyright © 2011-2022 走看看