不可思议的vb6.0的文件写操作
目前做了一个加密程序,发现加密后写到文件中,再从文件读入后不能解密,经过分析发现,是vb6.0在写入文件时,写入的内容和变量保存的内容有差别,虽然已经通过其它方法解决这种现象,但我不明白vb6.0为什么会出现这种情况,请各位帮助解释一下?
下面是两个小例子
例一:
Private Sub Command5_Click()
Dim s As String
Dim s1 As String
Dim b(0) As Byte
s1 = "a"
b(0) = 97
s = b
Debug.Print "b:" & b(0) & " s:" & AscB(s) & " s1:" & LenB(s1)
'显示 b:97 s:97 s1:2 证明变量保存的没问题
If Dir("a.dat") <> "" Then Kill "a.dat"
Open "a.dat" For Binary As #1
Put #1, , b
Put #1, , s
Put #1, , s1
Close #1
'使用Uedit32打开文件发现 只写了两个值 61 61 中间s没有写到文件中
'为了验证s确实没有写到文件中 使用下列方式只写s 使用Uedit32打开,结果文件b.dat是空的
Open "b.dat" For Binary As #1
Put #1, , s
Close #1
End Sub
例二:
Private Sub Command8_Click()
Dim s As String
Dim b(1) As Byte
b(0) = 97
b(1) = 20
s = b
Debug.Print "b:" & b(0) & ":" & b(1) & " s:" & AscB(LeftB(s, 1)) & ":" & AscB(Right(s, 1))
'显示 b:97:20 s:97:20 证明变量保存的值没问题
If Dir("a.dat") <> "" Then Kill "a.dat"
Open "a.dat" For Binary As #1
Put #1, , s
Close #1
'使用Uedit32打开文件发现 只写了一个值 3F 为什么会出现这种情况,
'上面已经证明变量s中保存的值(97 和20)确实是正确的,但为什么以二进制方式写入文件中
',应该是和变量是一致的呀,
'我发现vb确实不如C语言好用,至少在C中不会出现这种情况
Open "b.dat" For Binary As #1
Put #1, , b
Close #1
' 使用Uedit32打开文件b.dat是十六进制 61 14 即97 20 是正确的
End Sub
[解决办法]
那你就不能使用字串变量,使用字节数组
[解决办法]
Option Explicit
Option Explicit
Dim A As String
Dim B() As Byte
Dim C As String * 5
Dim D() As Byte
Dim I As Long
Dim FileNumber As Long
Dim FileName As String
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0: If Len(Dir(FileName)) Then Kill FileName
FileNumber = FreeFile
Open FileName For Binary As FileNumber
Put FileNumber, , A
Put FileNumber, , B
Close FileNumber
Case 1: FileNumber = FreeFile
Open FileName For Binary As FileNumber
Get FileNumber, , C
Get FileNumber, , D
Close FileNumber
Me.Cls
Me.Print "A String:" & A & Chr(13) & "B()=>Unicode:" & StrConv(B, vbUnicode) & Chr(13) & "C String:" & C & Chr(13) & "D()=>Unicode:" & StrConv(D, vbUnicode) & Chr(13)
For I = 0 To 9
Me.Print "B(" & I & "):" & B(I), "D(" & I & "):" & D(I)
Next
End Select
End Sub
Private Sub Form_Load()
FileName = App.Path & "\test.dat"
ReDim B(9)
ReDim D(9)
For I = 0 To 9
B(I) = 97 + I
Next
A = B
End Sub
我要的就是为什么会出现这种情况,12楼解答了,我只是很郁闷,vb6会出现这种不一致情况,如果是C就不会出现不一致情况,变量是什么,保存到文件就是什么,