如题:
我定议了一个结构里面有byte数组.我直接给值出错!!

解决方案 »

  1.   

    b()=StrConv(yourstr,vbFromUnicode)   
    '将字符串转换成字节数组
      

  2.   

    我用copymemory ,然后写入一定长字节数到文件,但是再去读那个长度出来!!为什么写的内容的读出来的内容不同了呢?(写入有中文)
      

  3.   

    我的代码如下:
           写:
           Dim tmpstr As String
           tmpstr = "有一些中文字符,又有一些E文如:hi"
           Dim tmpbyte() As Byte
           ReDim tmpbyte(249)
           Dim MyHNd
           CopyMemory tmpbyte(0), tmpstr, LenB(StrConv(tmpstr, vbFromUnicode))
           MyHNd = FreeFile()
           Dim tmpUrlPath As String
           tmpUrlPath = dbpath & "\tmpurl.dat"
           Open tmpUrlPath For Binary As MyHNd
           Put MyHNd, LOF(MyHNd) + 1, tmpbyte()
           Close MyHNd       读:
           Dim tmpbyte() As Byte
           ReDim tmpbyte(249) 
           MyHNd = FreeFile()
           Dim tmpUrlPath As String
           tmpPath = dbpath & "\tmp.dat"
           Open tmpPath For Binary As MyHNd
           if LastPos="" then LastPos=1
           Get MyHNd,LastPos, tmpbyte()
    =====================================================
    现在的问题是:写进去和读出来的内容不一样!
      

  4.   

    CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))另:
    你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。
      

  5.   

    1 晕写入文件直接保存就可以了,何必费呢么多事情呢。
    ====
    我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?
    2
    CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))另:
    你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。=====
    我就先照上面的代码,写250字节.再回头去读250字节出来..显示的内容就和写进去的不同了..这个问题出在哪啊?
      

  6.   

    //1 晕写入文件直接保存就可以了,何必费呢么多事情呢。
    ====
    我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?//
    用random读写文件,定义个结构就可以了嘛,copymemory很容易让程序挂掉,我现在都不怎么敢用了,vb里面的指针就是黑盒子啊
      

  7.   

    用random读写文件,定义个结构就可以了嘛
    ======
    这个好像也存在这个问题..我用定义了type 后..写进去和读出来的内容就不一样了!晕!@
      

  8.   

    //现在的问题是:写进去和读出来的内容不一样!先读出来,然后用strconv转化为字串,可能需要用left截断还有,你的copymemory是怎么声明的?
      

  9.   

    1 晕写入文件直接保存就可以了,何必费呢么多事情呢。
    ====
    我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?
    2
    CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))另:
    你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。=====
    我就先照上面的代码,写250字节.再回头去读250字节出来..显示的内容就和写进去的不同了..这个问题出在哪啊?==================================================================================用二进制文件来记录是不需要定长的。你只要定义一个结构,将数据放在结构里,直接“put #1,,结构变量”   就可以完成写入数据的操作(只能追加),在读取时:“seek 1,1: get #1,,结构变量”,可以从文件中读出所有的数据记录。
      

  10.   

    即使这样也没有必要转换成字结数组,直接保存字符串,定义结构
    比如
    type MyData
         ID as integer
         strInfo as string * 249
    end type
    dim sRec as MyData
    sRec.ID=1
    sRec.strInfo="有一些中文字符,又有一些E文如:hi"
    Open tmpUrlPath For Random As MyHNd len=len(MyData)
         Put MyHNd, 1, sRec
    Close MyHNd
      

  11.   

    使用结构+随即文件操作是一个不错的选择,
    这里给你两个小小的子程序,分别用来写和读记录:'将设置从文件中一次性读入自定义类型变量Settings中
    Public Sub GetSetting(ByVal IniFile As String)
    Dim I As Long
    I = Len(Settings)
    ChDir App.Path
    Close #1
    Open IniFile For Random As #1 Len = I
    Get #1, 1, Settings
    Close #1
    AddOpe "GetIni " & IniFile
    End Sub'将自定义变量Settings中的内容保存到文件
    Public Sub WriteSetting(ByVal IniFile As String)
    Dim I As Long
    I = Len(Settings)
    ChDir App.Path
    Close #1
    Open IniFile For Random As #1 Len = I
    Put #1, 1, Settings
    Close #1
    AddOpe "WriteIni " & IniFile
    End Sub这两段是我自己的程序中现用的,自定义数据类型为:
    Type Setting
       Transparent As Boolean
       SavingP As String * 100
       BackG As String * 100
       TransparentLevel As Byte
       SortType As Byte
       LayOuts As LayOut
       PrintSettings As PrintSetting
       Batch As Integer
    End Type
    Public Settings As Setting当然,楼主不必照抄这个,因为它可以是任何类型的变量,当然也包括数组。
      

  12.   

    忘记了一点,上面两段程序中的AddOpe ...楼主要去掉,那是我用来做LOG记录的,和题意无关。