很简单的一个读取ini问题

skyhh 2004-07-06 11:12:29
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 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 Sub Form_Load()
Dim nCnt As Long
Dim ResultString As String * 256
第一种情况:nCnt = GetPrivateProfileString("SQLSERVER", "SERVER", " ", ResultString, 256, App.Path + "\rzgl0706.ini")
第二种情况:nCnt = GetPrivateProfileString("SYSTEM", "SERVER", " ", ResultString, 256, App.Path + "\rzgl0706.ini")
Text1.Text = nCnt
End Sub
第一种和第二种分开用的
rzgl0706.ini内容如下:
[SYSTEM]
SERVER=abcdefghijkml
DATABASE=local
USERID=sa
PASSWORD=

[SQLSERVER]
SERVER=MSSQLServer
USERNAME=SA
PWS=
DATABASE=local
但第一种情况的结果是:11
但第二种情况的结果是:13
这是为什么!


...全文
221 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyhh 2004-07-08
  • 打赏
  • 举报
回复
happyrui(阿睿) 那你有qq吗!
happyrui 2004-07-07
  • 打赏
  • 举报
回复
偶也姓黄,^_^
huangjianyou 2004-07-07
  • 打赏
  • 举报
回复
msn更少开了,e-mail反而差不多每天都会收一下:huangjy1@163.com
skyhh 2004-07-07
  • 打赏
  • 举报
回复
huangjianyou(小健)
msn,e-mail呢
huangjianyou 2004-07-06
  • 打赏
  • 举报
回复
是,我姓黄,QQ不是经常开,公司不给开嘛。
wumy_ld 2004-07-06
  • 打赏
  • 举报
回复
读写ini文件的模块:
Option Explicit
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


Public Function GetINI(strINIFile As String, strSection As String, _
strKey As String, strDefault As String)
On Error GoTo ErrMsg
Dim strTemp As String
Dim intLength As Integer

'判断INI文件是否存在
If Dir(strINIFile) = "" Then
MsgBox "INI文件“" & strINIFile & "”已被损坏,请联系管理人员或开发人员!", vbExclamation, "警告!"
' RepairINIFile strINIFile
Exit Function
End If
strTemp = Space$(256)
intLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, 255, strINIFile)
GetINI = Left$(strTemp, intLength)
Exit Function
ErrMsg:
MsgBox "从INI文件“" & strINIFile & "”文件读取数据时出现异常,请检查是否删除或移动了该文件!" & vbCrLf & _
Err.Description, vbExclamation, "提示"
End Function

Public Function WriteINI(strINIFile As String, strSection As String, _
strKey As String, strValue As String) As Boolean
On Error GoTo ErrMsg
Dim n As Integer

WriteINI = False
'Replace any CR/LF characters with spaces
If Len(strValue) >= 1 Then
For n = Len(strValue) To 1
If Mid$(strValue, n, 1) = vbCr Or Mid(strValue, n, 1) = vbLf Then
Mid$(strValue, n, 1) = ""
End If
Next n
End If

n = WritePrivateProfileString(strSection, strKey, strValue, strINIFile)
WriteINI = True
Exit Function
ErrMsg:
MsgBox "向INI文件“" & strINIFile & "”文件写入数据时出现异常,请检查是否删除或移动了该文件!" & vbCrLf & _
Err.Description, vbExclamation, "提示"
End Function
skyhh 2004-07-06
  • 打赏
  • 举报
回复
huangjianyou(小健)
你也是姓黄吧!
做个朋友吧!告诉我你的qq好吗!

huangjianyou 2004-07-06
  • 打赏
  • 举报
回复
完整代码:Option Explicit
'模块
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 Sub Command1_Click()
'调用
MsgBox GetIniSetting("SYSTEM", "SERVER", "")
MsgBox GetIniSetting("SQLSERVER", "SERVER", "")
End Sub

'获得ini设置
Public Function GetIniSetting(Section As String, KeyName As String, DefaultValue As String) As String
Dim X As Long
Dim Holder As String * 255
X = GetPrivateProfileString(Section, KeyName, DefaultValue, Holder, 254, App.Path & "\rzgl0706.ini")
GetIniSetting = Left$(Holder, InStr(Holder, Chr$(0)) - 1)
End Function

skyhh 2004-07-06
  • 打赏
  • 举报
回复
thank you very mach!!!!!!!!!
huangjianyou 2004-07-06
  • 打赏
  • 举报
回复
贴少了自己写的一个函数:'获得ini设置
Public Function GetIniSetting(Section As String, KeyName As String, DefaultValue As String) As String
Dim X As Long
Dim Holder As String * 255
X = GetPrivateProfileString(Section, KeyName, DefaultValue, Holder, 254, App.Path & "\rzgl0706.ini")
GetIniSetting = Left$(Holder, InStr(Holder, Chr$(0)) - 1)
End Function

huangjianyou 2004-07-06
  • 打赏
  • 举报
回复
'模块
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

'调用
GetIniSetting("SYSTEM", "Server", "")
GetIniSetting("SQLSERVER", "Server", "")
skyhh 2004-07-06
  • 打赏
  • 举报
回复
那么怎么样才能使我的输出结果成为:

但第一种情况的结果是:abcdefghijkml
但第二种情况的结果是:MSSQLServer

不好意思,刚开始用这东东!

huangjianyou 2004-07-06
  • 打赏
  • 举报
回复
http://www.ebege.com/winapi.asp?name=GetPrivateProfileString
huangjianyou 2004-07-06
  • 打赏
  • 举报
回复
GetPrivateProfileString的返回值:Long,复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符。如lpReturnedString缓冲区不够大,不能容下全部信息,就返回nSize-1(若lpApplicationName或lpKeyName为NULL,则返回nSize-2)

结果没错啊,abcdefghijkml的长度为13,MSSQLServer的长度为11。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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