VB.NET操作ini文件的方法

VB.NET操作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文件中读论文范文www.chuibin.com入程序中的变量.

    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 n ge;

  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

  );

    这里的参数意义与上相同.使用方法如下:

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

  三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:

    1.写入:

  CString strTemp,strTempA;

  int i;

  int nCount=6;

  文件://共有6个文件名需要保存

  for(i=0;i {strTemp.format("%d",i);

  strTempA=文件名;

  文件://文件名可以从数组,列表框等处取得.

  ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,

  "c:\\usefile\\usefile.ini");

  }

  strTemp.format("%d",nCount);

  ::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");

  文件://将文件总数写入,以便读出.

    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");

  文件://使用strTempA中的内容.

  }

    补充四点:

     1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.

     2.文件名的路径中必须为 \\ ,因为在VC++中, \\ 才表示一个 \ .

     3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".\\student.ini".

     4.从网页中粘贴源代码时,最好先粘贴至记事本中,再往VC中粘贴,否则易造成编译错误,开始时我也十分不解,好好的代码怎么就不对呢?后来才找到这个方法.还有一些代码中使用了全角字符如:<,\等,也会

  造成编译错误.

  GetPrivateProfileString函数说明

  该函数返回值为string的长度(long型),而从ini文件获得的字符串则保留在目的缓冲器中

  DWORD GetPrivateProfileString(

  LPCTSTR lpAppName,

  LPCTSTR lpKeyName,

  LPCTSTR lpDefault,

  LPTSTR lpReturnedString,

  DWORD nSize,

  LPCTSTR lpFileName

  );

    其中各参数的意义:

     前二个参数与 WritePrivateProfileString中的意义一样.

     lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.

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

     nSize : 目的缓存器的大小.

     lpFileName : 是完整的INI文件名.

  VB读写INI文件的四个函数

  '文件名SourceDB.ini文件

  Private 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

  Private 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

  '以下两个函数,读/写ini文件,固定节点setting,in_key为写入/读取的主键

  '仅仅针对是非值

  'Y:yes,N:no,E:error

  Public Function GetIniTF(ByVal In_Key As String) As Boolean

  On Error GoTo GetIniTFErr

  GetIniTF = True

  Dim GetStr As String

  GetStr = VBA.String(128, 0)

  GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"

  GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")

  If GetStr = "1" Then

  GetIniTF = True

  GetStr = ""

  Else

  GoTo GetIniTFErr

  End If

  Exit Function

  GetIniTFErr:

  Err.Clear

  GetIniTF = False

  GetStr = ""

  End Function

  Public Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean

  On Error GoTo WriteIniTFErr

  WriteIniTF = True

  If In_Data = True Then

  WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini"

  Else

  WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini"

  End If

  Exit Function

  WriteIniTFErr:

  Err.Clear

  WriteIniTF = False

  End Function

  '以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键

  '针对字符串值

  '空值表示出错

  Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String

  On Error GoTo GetIniStrErr

  If VBA.Trim(In_Key) = "" Then

  GoTo GetIniStrErr

  End If

  Dim GetStr As String

  GetStr = VBA.String(128, 0)

  GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"

  GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")

  If GetStr = "" Then

  GoTo GetIniStrErr

  Else

  GetIniStr = GetStr

  GetStr = ""

  End If

  Exit Function

  GetIniStrErr:

  Err.Clear

  GetIniStr = ""

  GetStr = ""

  End Function

  Public Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean

  On Error GoTo WriteIniStrErr

  WriteIniStr = True

  If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then

  GoTo WriteIniStrErr

  Else

  WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini"

  End If

  Exit Function

  WriteIniStrErr:

  Err.Clear

  WriteIniStr = False

  End Function

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有