我用的writeprivateprofilesection创建的段名,然后用getprivateprofilesection读取ini中的内容,但是只能读取到第一行的内容,第二行、第三行都读取不到。
  查找了好多。说是数组结尾有\0作为结束符,所以数组不能继续往下读取,既然这样,用vb6.0该怎么去解决这个问题,进行将所有的内容读取出来呢。VBiniVisual Basic 6.0

解决方案 »

  1.   

    Public Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByRef lpReturnedString As Byte, ByVal nSize As Long, ByVal lpFileName As String) As Long用 Byte 数组接收。
      

  2.   

    那是不是这么用:
    dim data(500) as byte 
    getprivateprofilesection "section",data(500),1000,app.path & "\日志.ini"
    可是为什么系统报错啊,是不是没有为data分配空间啊求解
      

  3.   

    试试:
    GetPrivateProfileSection "section",data(0),500,app.path & "\日志.ini"
      

  4.   

    我这有个我写的现成组件,你可以用用看:
    http://download.csdn.net/detail/supermanking/5100921
      

  5.   

    还是不行,给你完整代码看一下吧
    dim datetime as string
    dim data() as byte
    datetime=DTPicker1.value
    GetPrivateProfileSection datetime,data(0),500,app.path & "\日志.ini"
    text1.text=data
    然后系统提示下标越界。
      

  6.   

    Option ExplicitPublic Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByRef lpReturnedString As Byte, ByVal nSize As Long, ByVal lpFileName As String) As LongOption ExplicitPrivate Sub Command1_Click()
    Dim i As Long, n As Long, ret As Long, bytData(1024) As Byte, strTemp As String, strItem() As Stringn = UBound(bytData)
    ret = GetPrivateProfileSection("section", bytData(0), n, app.path & "\日志.ini")
    strTemp = StrConv(bytData, vbUnicode)strItem = Split(Left(strTemp, ret - 1), Chr(0))For i = 0 To UBound(strItem)
        Debug.Print strItem(i)
    Next iEnd Sub
      

  7.   


    你既然改为动态分配的数组,就必须实例化:
    Redim data(500)
      

  8.   

    才疏学浅,直接搞不定了,redim data(500)后,提示下标越界你给的那段程序,也运行不了
      

  9.   

    好了突然可以运行了。新手伤不起啊。还有个问题,就是我想删除ini中的某个字段,用的是别人说的
    writeprivateprofilestring datetime,null,null,app.path & "\日志.ini"
    可是为啥我用的时候,系统总是提示null未定义之类的错误呢。跪求了。。
      

  10.   

    我给的代码,是在我的机器上调通了的。你重建一个工程,开一个标准模块放第一段代码。再开一个窗体放第二段代码。不要眼睛只盯着代码。要搞懂 API 程序调用的机制。
      

  11.   

    谢谢大神的倾心相助,懂了。还有上面那个问题顺便一起解释了吧。话说你这段代码,查了老半天才搞懂,将查的贴出来与小白们共享吧。
    Private Sub Command1_Click()
    Dim i As Long, n As Long, ret As Long, bytData(1024) As Byte, strTemp As String, strItem() As String
     
    n = UBound(bytData)‘获得数组的上限值
    ret = GetPrivateProfileSection("section", bytData(0), n, app.path & "\日志.ini")’ret得到的是get函数得到的数据,如123的话,那么ret就是4,还有最后的\0(null)符
    strTemp = StrConv(bytData, vbUnicode)‘将bytdata按照vbunicode转换成内存中的形式,为的是方便后面split的操作
     
    strItem = Split(Left(strTemp, ret - 1), Chr(0))’left从strTEMP左边取19个字符,然后按照chr(0)分
     
    For i = 0 To UBound(strItem)
        Debug.Print strItem(i)
    Next i
     
    End Sub
      

  12.   

    writeprivateprofilestring datetime,vbnullstring,vbnullstring,app.path & "\日志.ini"?
      

  13.   

    忘了一个问题了,为什么在声明api的时候,你讲返回的东东改为了byref,为什么用byval不能用。byref和byval具体区别我懂,但是到了这个题中就搞不懂了