参照 Sub listload() Dim displaylist() As String Dim a As Integer,i As Integer, disp As String If fso.fileexists("INIFILENAME.ini") Then disp = Space(2000) a = GetPrivateProfileString(vbNullString, vbNullString, "", disp, Len(disp), inipath) displaylist = Split(disp, Chr(0)) For i = 0 To UBound(displaylist) - 2 List1.AddItem displaylist(i) Next End If End Sub
之前 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
fso.fileexistsFSO 变量未定义!
Option ExplicitPrivate Sub Command1_Click() '测试 Dim section() As String section = GetAllSection("c:\winnt\win.ini") Dim i As Long For i = 0 To UBound(section) Debug.Print section(i) Next End SubPrivate Function GetAllSection(ByVal filename As String) As String() Dim mGetAllSection() As String Dim buff() As Byte Dim i As Long i = FileLen(filename) ReDim buff(i - 1) Dim filenum As Integer filenum = FreeFile Open filename For Binary As filenum Get filenum, , buff Close filenum Dim s As String s = StrConv(buff, vbUnicode) Dim marray() As String marray = Split(s, vbCrLf) Dim temps As String Dim mstr As String Dim j As Long Dim n As Long n = 0 Dim a1() As String, a2() As String For i = 0 To UBound(marray) temps = Trim$(marray(i)) a1 = Split(temps, "[") a2 = Split(temps, "]") If (UBound(a1) = 1) And (UBound(a2) = 1) Then If Left$(temps, 1) = "[" And Right$(temps, 1) = "]" Then j = Len(temps) mstr = Mid$(temps, 2, j - 2) ReDim Preserve mGetAllSection(n) mGetAllSection(n) = mstr n = n + 1 End If End If Next GetAllSection = mGetAllSection End Function
你可以把fso去掉。Sub listload() Dim displaylist() As String Dim a As Integer,i As Integer, disp As String
disp = Space(2000) '其实只要这3句话就行了. a = GetPrivateProfileString(vbNullString, vbNullString, "", disp, Len(disp), "INIFILENAME.ini") displaylist = Split(disp, Chr(0)) For i = 0 To UBound(displaylist) - 2 List1.AddItem displaylist(i) Next End Sub
Sub listload()
Dim displaylist() As String
Dim a As Integer,i As Integer, disp As String
If fso.fileexists("INIFILENAME.ini") Then disp = Space(2000)
a = GetPrivateProfileString(vbNullString, vbNullString, "", disp, Len(disp), inipath)
displaylist = Split(disp, Chr(0)) For i = 0 To UBound(displaylist) - 2
List1.AddItem displaylist(i)
Next
End If
End Sub
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Dim section() As String
section = GetAllSection("c:\winnt\win.ini")
Dim i As Long
For i = 0 To UBound(section)
Debug.Print section(i)
Next
End SubPrivate Function GetAllSection(ByVal filename As String) As String()
Dim mGetAllSection() As String
Dim buff() As Byte
Dim i As Long
i = FileLen(filename)
ReDim buff(i - 1)
Dim filenum As Integer
filenum = FreeFile
Open filename For Binary As filenum
Get filenum, , buff
Close filenum
Dim s As String
s = StrConv(buff, vbUnicode)
Dim marray() As String
marray = Split(s, vbCrLf)
Dim temps As String
Dim mstr As String
Dim j As Long
Dim n As Long
n = 0
Dim a1() As String, a2() As String
For i = 0 To UBound(marray)
temps = Trim$(marray(i))
a1 = Split(temps, "[")
a2 = Split(temps, "]")
If (UBound(a1) = 1) And (UBound(a2) = 1) Then
If Left$(temps, 1) = "[" And Right$(temps, 1) = "]" Then
j = Len(temps)
mstr = Mid$(temps, 2, j - 2)
ReDim Preserve mGetAllSection(n)
mGetAllSection(n) = mstr
n = n + 1
End If
End If
Next
GetAllSection = mGetAllSection
End Function
Dim displaylist() As String
Dim a As Integer,i As Integer, disp As String
disp = Space(2000) '其实只要这3句话就行了.
a = GetPrivateProfileString(vbNullString, vbNullString, "", disp, Len(disp), "INIFILENAME.ini")
displaylist = Split(disp, Chr(0)) For i = 0 To UBound(displaylist) - 2
List1.AddItem displaylist(i)
Next
End Sub
先得到各行文本内容,然后判断每行是否SECTION不就行了。这个方法我也想过,等手头的事交差的再做