我定义了个通用变量userdb,在Form Load时,运行以下代码,但无论在SZInventory.ini里有没有找到内容,都只会走ELSE的语句(显示Y), 好郁闷~请高手指教,谢谢! 'On Error GoTo Ext
strFileName = App.Path & "\SZInventroy.ini"
lngHandle = FreeFile()
Open strFileName For Input As lngHandle
Do While Not EOF(lngHandle)
Line Input #lngHandle, strLine
strAll = strAll & strLine & vbCrLf
Loop
userdb = Right(strAll, Len(strAll) - 15) If userdb = "" Then
MsgBox userdb
Else
MsgBox "Y"
End If
strFileName = App.Path & "\SZInventroy.ini"
lngHandle = FreeFile()
Open strFileName For Input As lngHandle
Do While Not EOF(lngHandle)
Line Input #lngHandle, strLine
strAll = strAll & strLine & vbCrLf
Loop
userdb = Right(strAll, Len(strAll) - 15) If userdb = "" Then
MsgBox userdb
Else
MsgBox "Y"
End If
userdb = Right(strAll, Len(strAll) - 15)
userdb----SZInventory.ini文件从第16个字符到结尾的内容If userdb = "" Then '你找什么?
就算加上trim(UserDB)结果还是一样!
debug.Print UserDB也是空的
strAll = strAll & strLine & vbCrLf'这句执行完最少strAll里包含了回车换行( vbCrLf')
所以
userdb = Right(strAll, Len(strAll) - 15)'userdb它永远也不会空串(userdb="")
去掉vbCrLf它试试
Option Explicit '强制宣告定义变量
'************************************* INI 读写用到的API
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 GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, 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
Dim AppDisk$, IniName$ '定义变量Private Sub Form_Load()
'将窗体居中显示 (屏幕宽度减去窗体的宽度)除以2 , (屏幕高度减去窗体的高度)除以2
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
'将本地路径赋值给变量 AppDisk
AppDisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
Command1.Caption = "读 取" '命令按钮1名称
Command2.Caption = "写 入" '命令按钮2名称
IniName = AppDisk & "Test.ini" '将INI文件名称带入变量
End SubPrivate Sub Command1_Click()
If Dir(IniName) = "" Then MsgBox "INI文件不存在!": Exit Sub '判断文件如不存在则提示,并退出这个事件
Text1.Text = INIRead("UserPass", "UserName", IniName) '将INI文件里面的UserPass项中的UserName段(用户)的内容导入Text1文本框中
Text2.Text = INIRead("UserPass", "PassWord", IniName) '将INI文件里面的UserPass项中的PassWord段(密码)的内容导入Text2文本框中
End SubPrivate Sub Command2_Click()
If Text1.Text = "" Or Text2.Text = "" Then MsgBox "请输入用户名与密码!": Exit Sub '用户名与密码如为空值不得保存并退出此事件
Call INIWrite("UserPass", "UserName", Text1.Text, IniName) '将Text1文本框中的内容写入INI文件里面的UserPass项中的UserName段(用户)
Call INIWrite("UserPass", "PassWord", Text2.Text, IniName) '将Text2文本框中的内容写入INI文件里面的UserPass项中的PassWord段(密码)
MsgBox "保存完成!"
End SubPublic Function INIRead(iAppName As String, iKeyName As String, iFileName As String) As String
On Error Resume Next '如遇错误则继续往下一行运行
Dim iStr$, aaa$ '定义变量
iStr = String(255, Chr(0))
'使用API GetPrivateProfileString将INI文件里面针对某项某段的内容读进变量aaa
aaa = Left(iStr, GetPrivateProfileString(iAppName, ByVal iKeyName, "", iStr, Len(iStr), iFileName))
INIRead = IIf(InStr(aaa, Chr(0)) > 0, Replace(aaa, Chr(0), ""), aaa) '将读取的内容变量aaa里面的Chr(0)(不可见的结尾ASCii码),必需以空字符将它替换掉并返回
End FunctionPublic Function INIWrite(iAppName As String, iKeyName As String, iKeyString As String, iFileName As String)
On Error Resume Next
'使用API WritePrivateProfileString 将字符串写进INI文件里面, 针对某项某段的内容更新
Call WritePrivateProfileString(iAppName, iKeyName, iKeyString, iFileName)
End Function
If Instr(strAll,userdb) >0 Then
MsgBox userdb
Else
MsgBox "Y"
End If
strAll = strAll & strLine & vbCrLf
会使 strAll 加上有N多的空行 当然会引起错误。
你可以用StrConv一次性读入整个文件 或者 strall=strall & strline