我的代码如下: 写: 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() ===================================================== 现在的问题是:写进去和读出来的内容不一样!
即使这样也没有必要转换成字结数组,直接保存字符串,定义结构 比如 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
使用结构+随即文件操作是一个不错的选择, 这里给你两个小小的子程序,分别用来写和读记录:'将设置从文件中一次性读入自定义类型变量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当然,楼主不必照抄这个,因为它可以是任何类型的变量,当然也包括数组。
'将字符串转换成字节数组
写:
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()
=====================================================
现在的问题是:写进去和读出来的内容不一样!
你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。
====
我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?
2
CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))另:
你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。=====
我就先照上面的代码,写250字节.再回头去读250字节出来..显示的内容就和写进去的不同了..这个问题出在哪啊?
====
我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?//
用random读写文件,定义个结构就可以了嘛,copymemory很容易让程序挂掉,我现在都不怎么敢用了,vb里面的指针就是黑盒子啊
======
这个好像也存在这个问题..我用定义了type 后..写进去和读出来的内容就不一样了!晕!@
====
我想做一个简单的数据记录,这个文件里面可能有很多条记录,如果不以定长保存!我怎么去去读其中一条呢?
2
CopyMemory tmpbyte(0), StrConv(tmpstr, vbFromUnicode), LenB(StrConv(tmpstr, vbFromUnicode))另:
你写入文件是追加在文件尾的,你读出时要注意你刚写入的内容在后面。=====
我就先照上面的代码,写250字节.再回头去读250字节出来..显示的内容就和写进去的不同了..这个问题出在哪啊?==================================================================================用二进制文件来记录是不需要定长的。你只要定义一个结构,将数据放在结构里,直接“put #1,,结构变量” 就可以完成写入数据的操作(只能追加),在读取时:“seek 1,1: get #1,,结构变量”,可以从文件中读出所有的数据记录。
比如
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
这里给你两个小小的子程序,分别用来写和读记录:'将设置从文件中一次性读入自定义类型变量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当然,楼主不必照抄这个,因为它可以是任何类型的变量,当然也包括数组。