怎样用VB读取用C语言生成的二进制文件(*.dat)?
fwrite(&ddp.da_year,sizeof(int),1,fp); //年 2个字节
fwrite(&ddp.da_mon,sizeof(int),1,fp); //月 2个字节
fwrite(&ddp.da_day,sizeof(int),1,fp); //日 2个字节
fwrite(&zzdate[6],4,1,fp); //龄期 4个字节
fwrite(&zzdate[0],4,1,fp); //块数 4个字节
fwrite(maxfloat,sizeof(maxfloat),1,fp);//6个浮点数 6x4个字节
fwrite(&zzdate[3],4,1,fp);//4个字节
fwrite(name,8,1,fp);//编号 8个字节
fwrite(&tt.ti_hour,sizeof(int),1,fp);//时 2个字节
fwrite(&tt.ti_min,sizeof(int),1,fp);//分 2个字节 共计54字节
这是某一dat文件,是用C写入的,现在要将其还原成文本文件,每54个字节还原成为一行,该dat文件:http://www.99fst.com/stone/dat.rar
小弟在这里先谢过了 !解答高分相赠……
fwrite(&ddp.da_year,sizeof(int),1,fp); //年 2个字节
fwrite(&ddp.da_mon,sizeof(int),1,fp); //月 2个字节
fwrite(&ddp.da_day,sizeof(int),1,fp); //日 2个字节
fwrite(&zzdate[6],4,1,fp); //龄期 4个字节
fwrite(&zzdate[0],4,1,fp); //块数 4个字节
fwrite(maxfloat,sizeof(maxfloat),1,fp);//6个浮点数 6x4个字节
fwrite(&zzdate[3],4,1,fp);//4个字节
fwrite(name,8,1,fp);//编号 8个字节
fwrite(&tt.ti_hour,sizeof(int),1,fp);//时 2个字节
fwrite(&tt.ti_min,sizeof(int),1,fp);//分 2个字节 共计54字节
这是某一dat文件,是用C写入的,现在要将其还原成文本文件,每54个字节还原成为一行,该dat文件:http://www.99fst.com/stone/dat.rar
小弟在这里先谢过了 !解答高分相赠……
da_year as integer
da_mon as integer
da_day as integer
zzdate6 as long
zzdate0 as long
float1 as single
float2 as single
float3 as single
float4 as single
float5 as single
float6 as single
zzdate3 as long
name as string *8
ti_hour as integer
ti_min as integer
end typedim r as recopen dat.dat for binary as #1
do until eof(1)
open #1,,r
loop
close #1
然后连成一行重新写到文本文件即可
da_year as integer
da_mon as integer
da_day as integer
zzdate6 as long
zzdate0 as long
float1 as single
float2 as single
float3 as single
float4 as single
float5 as single
float6 as single
zzdate3 as long
name as string *8
ti_hour as integer
ti_min as integer
end typedim r as recopen "dat" for binary as #1
get #1,,r
close #1
然后联成一行即可
'将vc生成的文件 d:\ms\server\dat\0212.dat 还原成 "d:\mytext.txt"
'注意用lenb函数获得的rec类型变量的返回值为56(你可能会奇怪为什么不是54,想弄明白的话可以给我发短信),但这并不妨碍我们
Private Type rec
da_year As Integer
da_mon As Integer
da_day As Integer
zzdate6 As Long
zzdate0 As Long
float1 As Single
float2 As Single
float3 As Single
float4 As Single
float5 As Single
float6 As Single
zzdate3 As Long
mmname(7) As Byte
ti_hour As Integer
ti_min As Integer
End Type
Private Sub Command1_Click()
List1.Clear
Dim mfilename As String
mfilename = "d:\ms\server\dat\0212.dat"
Dim mlen As Long
mlen = FileLen(mfilename)
Dim recarray() As rec
mlen = mlen / 54 - 1
ReDim recarray(mlen)
Open mfilename For Binary As #1
Get #1, , recarray
Close #1
Dim i As Long, s As String
s = ""
'下面的写的烦琐了,也可以For i = 0 To mlen ,然后去掉s最后面的回车换行
For i = 0 To mlen - 1
s = s + CStr(recarray(i).da_year)
s = s + CStr(recarray(i).da_mon)
s = s + CStr(recarray(i).da_day)
s = s + CStr(recarray(i).zzdate6)
s = s + CStr(recarray(i).zzdate0)
s = s + CStr(recarray(i).float1)
s = s + CStr(recarray(i).float2)
s = s + CStr(recarray(i).float3)
s = s + CStr(recarray(i).float4)
s = s + CStr(recarray(i).float5)
s = s + CStr(recarray(i).float6)
s = s + CStr(recarray(i).zzdate3)
s = s + StrConv(recarray(i).mmname, vbUnicode)
s = s + CStr(recarray(i).ti_hour)
s = s + CStr(recarray(i).ti_min) + vbCrLf
Next
s = s + CStr(recarray(mlen).da_year)
s = s + CStr(recarray(mlen).da_mon)
s = s + CStr(recarray(mlen).da_day)
s = s + CStr(recarray(mlen).zzdate6)
s = s + CStr(recarray(mlen).zzdate0)
s = s + CStr(recarray(mlen).float1)
s = s + CStr(recarray(mlen).float2)
s = s + CStr(recarray(mlen).float3)
s = s + CStr(recarray(mlen).float4)
s = s + CStr(recarray(mlen).float5)
s = s + CStr(recarray(mlen).float6)
s = s + CStr(recarray(mlen).zzdate3)
s = s + StrConv(recarray(mlen).mmname, vbUnicode)
s = s + CStr(recarray(mlen).ti_hour)
s = s + CStr(recarray(mlen).ti_min)
'写入文件
Dim txtfile As String
txtfile = "d:\mytext.txt"
Open txtfile For Binary As #1
Put #1, , s
Close #1
End Sub
intV1 As Integer
intV2 As Integer
End TypeConst strFile = "C:\Test.dat"Private Sub SaveDate(ByVal intV1 As Integer, ByVal intV2 As Integer)
Dim lFN As Long
Dim lFL As Long
Dim tT As tTest
lFN = FreeFile
If Dir(strFile)<>"" Then
lFL = FileLen(strFile) + 1
Else
lFL=1
End If
tT.intV1 = intV1
tT.intV2 = intV2
Open strFile For Binary As #lFN
Seek #lFN, lFL
Put #lFN, , tT
Close #lFN
End SubPrivate Sub GetDate()
Dim lFN As Long
Dim lFL As Long
Dim tT As tTest
Dim lN As Integer
lFN = FreeFile
lN = 1
Me.List1.Clear
Open strFile For Random As #lFN Len = Len(tT)
Do Until EOF(lFN)
Get #lFN, lN, tT
Me.Print "V1=" & tT.intV1 & " V2=" & tT.intV2
lN = lN + 1
Loop
Close #lFN
End Sub
用http://www.99fst.com/stone/dat.rar测试过吗,回答问题要负责一点:)
//什么意思?
难道说举例子还要和问题的自定义数据类型一样?他不会去举一反三吗?
手把手 未必是好事!这是楼主的话:
//谢谢你的解答,可是REC的LenB为64呀?导出来不对应,而且在这个DAT里有N组这样的数据,这样恐怕不行吧?很明显,楼主是不明白如何获得多组数据,你的程序没有这方面的语句吧:)如果言语间得罪了你,还请见谅