如何访问 *.ini 里的数据,请各位指点一二!

caoliyong 2003-05-30 04:21:54
我自己用VB做了一个小程序,用来发送命令的。*.ini里存储有命令类型和命令。每种命令类型都有若干条命令,怎样访问才能做到我发送的命令是我选中命令类型中的命令。
存储方式为:
命令类型一
命令一
命令二
命令类型二
命令一
命令二
命令类型三
命令一
命令二
请各位指点一二
...全文
21 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
planetike 2003-05-30
  • 打赏
  • 举报
回复
将下面的内容copy到一个模块里面,你就可以用两个函数调用了。
一个是readini,一个是writeini,很简单。




'两个函数 , 先在一个模快中定义API函数 ike
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationname As String, ByVal LpKeyName As Any, ByVal lsString As Any, ByVal lplFilename As String) As Long
'如果是读INT值可以用字符串转化,所以没有另外定义函数
'Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPriviteProfileIntA" (ByVal lpApplicationname As String, ByVal LpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationname As String, ByVal LpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

'定义读与写INI文件的函数
'****读INI文件****
'文件名 lpFileName 如果不存在会自己创建,如果只有文件名,默认在Windows\system目录下
'[lpAppName]
'lpKeyName=取回的设置值
'lpDefault 当键值不存在时的默认值
Public Function ReadINI(lpFileName As String, lpAppName As String, LpKeyName As String) As String
Dim Temp As String * 20
Dim lpDefault As String
lpDefault = ""
If GetPrivateProfileString(lpAppName, LpKeyName, lpDefault, Temp, Len(Temp), lpFileName) <= 0 Then
ReadINI = ""
Else
ReadINI = MyTrim(Temp) 'MyTrim函数见下
End If
End Function
'****写INI文件****
'[lpAppName]
'lpKeyName=lpString
Public Function WriteINI(lpFileName As String, lpAppName As String, LpKeyName As String, lpString As String) As Boolean
If WritePrivateProfileString(lpAppName, LpKeyName, lpString, lpFileName) = 0 Then
WriteINI = False
Else
WriteINI = True
End If
End Function

'包含三个函数,分别取Rtrim,Ltrim,Trim
'可以去字符串中如ASC码为0,10,13,32的字符
Public Function MyRtrim(Tmpstr As String)
Dim i, s As Integer
i = Len(Tmpstr)
If i = 0 Then
MyRtrim = ""
Exit Function
End If
s = Asc(Right(Tmpstr, 1))
While (s = 0 Or s = 13 Or s = 10 Or s = 32) And i > 0
i = i - 1
Tmpstr = Left(Tmpstr, i)
If Len(Tmpstr) = 0 Then
MyRtrim = ""
Exit Function
End If
s = Asc(Right(Tmpstr, 1))
Wend
MyRtrim = Tmpstr
End Function

Public Function MyLtrim(Tmpstr As String)
Dim i, s As Integer
i = Len(Tmpstr)
If i = 0 Then
MyLtrim = ""
Exit Function
End If
s = Asc(Left(Tmpstr, 1))
While (s = 0 Or s = 13 Or s = 10 Or s = 32) And i > 0
i = i - 1
Tmpstr = Right(Tmpstr, i)
If Len(Tmpstr) = 0 Then
MyLtrim = Tmpstr
Exit Function
End If
s = Asc(Left(Tmpstr, 1))
Wend
MyLtrim = Tmpstr
End Function

Public Function MyTrim(Tmpstr As String)
Tmpstr = MyLtrim(Tmpstr)
Tmpstr = MyRtrim(Tmpstr)
MyTrim = Tmpstr
KJ_Wang 2003-05-30
  • 打赏
  • 举报
回复
我在用的一段:
Option Explicit
Public 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
Public Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Public 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
Public Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long

Public Cnn As New ADODB.Connection
Public DBName As String
Public ServerName As String
Public SysUser As String
Public DBPassword As String 'Password
Public DBUserID As String 'UserName
Public AppPath As String
Public Const BTNS = "00000000000000101"
Public Const BTNSEDIT = "11111011110000101"
Public Const SYSNAME = "美容专家连锁店管理系统"

Sub Main()
AppPath = App.Path
ServerName = GetServerName()
DBName = GetDatabase()
DBUserID = GetUserID()
DBPassword = GetDBPassword()

Cnn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=;Initial Catalog=" & DBName & ";Data Source=" & ServerName
Cnn.Open
Cnn.CursorLocation = adUseClient
frmSplash.Show
End Sub

Public Function GetServerName() As String
Dim Buffer As String * 255
Dim x As Integer

x = GetPrivateProfileString("CnnServer", "Server", "(Not Found)", Buffer, 255, AppPath & "\Setup.ini")
If Left(Buffer, x) = "(Not Found)" Then
MsgBox "你的服务器没有找到,请修改你有Setup.INI文件的Server", vbInformation

Exit Function
Else
GetServerName = Left(Buffer, x)
End If
End Function

Public Function GetDatabase() As String
Dim Buffer As String * 255
Dim x As Integer
x = GetPrivateProfileString("CnnServer", "Database", "(Not Found)", Buffer, 255, AppPath & "\Setup.ini")
If Left(Buffer, x) = "(Not Found)" Then
MsgBox "你的服务器没有找到,请修改你有Setup.INI文件的Server", vbInformation
Exit Function
Else
GetDatabase = Left(Buffer, x)
End If
End Function


Public Function GetUserID() As String
Dim Buffer As String * 255
Dim x As Integer
x = GetPrivateProfileString("CnnServer", "UserID", "(Not Found)", Buffer, 255, AppPath & "\Setup.ini")
If Left(Buffer, x) = "(Not Found)" Then
MsgBox "你的服务器没有找到,请修改你有Setup.INI文件的Server", vbInformation
Exit Function
Else
GetUserID = Left(Buffer, x)
End If
End Function


Public Function GetDBPassword() As String
Dim Buffer As String * 255
Dim x As Integer
x = GetPrivateProfileString("CnnServer", "Password", "(Not Found)", Buffer, 255, AppPath & "\Setup.ini")
If Left(Buffer, x) = "(Not Found)" Then
MsgBox "你的服务器没有找到,请修改你有Setup.INI文件的Server", vbInformation
Exit Function
Else
GetDBPassword = Left(Buffer, x)
End If
End Function

SETUP.INI文件
[CnnServer]
Server=WWW\WWW
Database=BeautySpecialist
Password=
UserID=sa
lihonggen0 2003-05-30
  • 打赏
  • 举报
回复
用VB开发应用程序如何使用INI文件
为了方便用户使用和使系统具有灵活性,大多数Win-dows应用程序将用户所做的选择以及各种变化的系统信息记录在初始化(INI)文件中。因此,当系统的环境发生变化时,可以直接修改INI文件,而无需修改程序。由此可见,INI文件对系统功能是至关重要的。本文将介绍采用VisualBasicforWindows(下称VB)开发Windows应用程序时如何读写INI文件。

INI文件是文本文件,由若干部分(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,每个关键词会控制应用程序某个功能的工作方式,等号右边的值(value)指定关键词的操作方式。其一般形式如下:



[section1]
keyword1=valuel
keyword2=value2
……
[section2]
keyword1=value1
keyword2=value2
……



其中,如果等号右边无任何内容(即value为空),那就表示Windows应用程序已为该关键词指定了缺省值,如果在整个文件中找不到某个关键词(或整个一部分),那同样表示为它们指定了缺省值。各个部分所出现的顺序是无关紧要的,在每一个部分里,各个关键词的顺序同样也无关紧要。

读写INI文件通常有两种方式:一是在Windows中用“记事本”(Notepad)对其进行编辑,比较简单,无需赘述;二是由Windows应用程序读写INI文件,通常是应用程序运行时读取INI文件中的信息,退出应用程序时保存用户对运行环境的某些修改。

关键词的值的类型多为字符串或整数型,应分两种情况读写。为了使程序具有可维护性和可移植性,最好把对INI文件的读写封装在一个模块(RWINI.BAS)中,在RWI-NI.BAS中构造GetIniS和GetIniN函数以及SetIniS和Se-tIniN过程,在这些函数和过程中需要使用WindowsAPI的“GetPrivateprofileString”、“GetPrivateProfileInt”和“WritePrivateProfileString”函数。

RWINI.BAS模块的程序代码如下:

在General-Declearation部分中声明使用到的WindowsAPI函数:



DeclareFunctionGetprivateprofileStringLib“Ker-nel”(ByVallpAppNameAsString,
ByVallpKeyNameAsString,ByVallpDefaultAsString,ByVallpRetrm-StringAs
String,ByValcbReturnStringAsInteger,ByValFilenameAsString)AsInteger
DeclareFunctionGetPrivatePfileIntLib“Kernel”(ByVallpAppNameAsString,
ByVallpKeyNameAsString,ByVallpDefaultAsInteger,ByValFilenameAsString)As
Integer
DeclareFuncitonWritePrivateprofileStringLib“Kernel”(ByVallpApplicationName
AsString,ByVallpKeyNameAsString,ByVallpStringAsString,ByVallplFileName
AsString)AsInteger
FunctionGetIniS(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefString
AsString)AsString
DimResultStringAsString*144,TempAsInteger
DimsAsString,iAsInteger
Temp%=GetPrivateProfileString(SectionName,KeyWord,“”,ResultString,144,AppProfileName())
‘检索关键词的值
IfTemp%>0Then‘关键词的值不为空
s=“”
Fori=1To144
IfAsc(Mid$(ResultString,i,1))=0Then
ExitFor
Else
s=s&Mid$(ResultString,i,1)
EndIf
Next
Else
Temp%=WritePrivateProfilesString(sectionname,KeyWord,DefString,ppProfileName())
‘将缺省值写入INI文件
s=DefString
EndIf
GetIniS=s
EndFunction
FunctionGetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefValue
AsIneger)AsInteger
DimdAsLong,sAsString
d=DefValue
GetIniN=GetPrivateProfileInt(SectionName,
KeyWord,DefValue,ppProfileName())
Ifd<>DefValueThen
s=“”&d
d=WritePrivateProfileString(SectionName,
KeyWord,s,AppProfileName())
EndIf
EndFunction
SubSetIniS(ByValSectionNameAsString,BtVaKeyWordAsString,ByValValStr
AsString)
Dimres%
res%=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
EndSub
SubSetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValValInt
AsInteger)
Dimres%,s$
s$=Str$(ValInt)
res%=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())
EndSub

SectionName为每一部分的标题,KeyWord为关键词,GetIniS和GetIniN中的DefValue为关键词的缺省值,SetIniS和SetIniN的ValStr和ValInt为要写入INI文件的关键词的值。为了能更好地说明如何使用以上函数和过程,下面举两个实例。

实例1:

开发应用程序通常要使用数据库和其它一些文件,这些文件的目录(包括路径和文件名)不应在程序中固定,而是保存在INI文件中,程序运行时由INI文件中读入。读入数据库文件的代码如下:



DimDatabasenameAsString
Databasename=GetIniS(“数据库”,“职工”,“”)
IfDatabaseName=“”ThenDatabaseName=InputBox(“请输入数据库《职工》的目录”),
App.Title)’也可通过“文件对话框”进行选择
OnErrorResumeNext
Setdb=OpenDatabas(DatabaseName)
IfErr<>0Then
MsgBox“打开数据库失败!”,MB-
ICONSTOP,App.Title:GotoErrorProcessing
Else
SetIniS“数据库”,“职工”,DatabaseName
EndIf
OnErrorGoTo0
……



实例2:

为了方便用户操作,有时需要保存用户界面的某些信息,例如窗口的高度和宽度等。装载窗体时,从INI文件中读入窗体高度和宽度,卸载窗体时将窗体当前高度和宽度存入INI文件,代码如下:



Sub Form1_Load()
……
Forml.Height=GetIniN(“窗体1”,“高度”,6000)
Form1.Width=GetIniN(“窗体1”,“高度”,4500)
EndSub
……
Sub Form1_Unload()
……
SetIniN“窗体1”,“高度”,Me.Height
SetIniN“窗体1,”宽度“,Me.Width
……
End Sub
lihonggen0 2003-05-30
  • 打赏
  • 举报
回复
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
Private Sub Form_Load()

Dim Ret As String, NC As Long
'Write the setting to the file (c:\test.ini) under
' Project1 -> Keyname
WritePrivateProfileString App.Title, "KeyName", "This is the value", "c:\test.ini"
'Create a buffer
Ret = String(255, 0)
'Retrieve the string
NC = GetPrivateProfileString(App.Title, "KeyName", "Default", Ret, 255, "C:\test.ini")
'NC is the number of characters copied to the buffer
If NC <> 0 Then Ret = Left$(Ret, NC)
'Show our string
MsgBox Ret
'Delete the file
Kill "c:\test.ini"
End Sub
lihonggen0 2003-05-30
  • 打赏
  • 举报
回复

建立与读取.ini文件

作者: cww 

  虽然进入win95之後,一般读写ini文件被读写Registry所取代,但我们还是可以透过
win31的传统方式读写ini文件,以存程式目前的相关设定,而於下一次程式执行时再
读回来。目前建议使用GetSetting SaveSetting的方式存於Registry中,不用目前
的方式。 储存程式的设定
'请於form中放3个TextBox,一个CommandBox
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

Private Sub Command1_Click()
Dim success As Long
success = WritePrivateProfileString("MyApp", "text1", Text1.Text, "c:\aa.ini")
'叁数一 Section Name
'叁数二 於.ini中的项目
'叁数三 项目的内容
'叁数四 .ini文件的名称
success = WritePrivateProfileString("MyApp", "text2", Text2.Text, "c:\aa.ini")
success = WritePrivateProfileString("MyApp2", "text3", Text3.Text, "c:\aa.ini")
End Sub

Private Sub Form_load()
Dim ret As Long
Dim buff As String
buff = String(255, 0)
ret = GetPrivateProfileString("Myapp", "text1", "text1", buff, 256, "c:\aa.ini")
'若.ini MyApp中无text1,则采用叁数三的值
Text1.Text = buff
buff = String(255, 0)
ret = GetPrivateProfileString("Myapp", "text2", "text2", buff, 256, "c:\aa.ini")
Text2.Text = buff
buff = String(255, 0)
ret = GetPrivateProfileString("Myapp2", "text3", "text3", buff, 256, "c:\aa.ini")
Text3.Text = buff
End Sub



 


1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧