首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

无法想象,难以理解的vb6.0的文件写操作

2013-06-19 
不可思议的vb6.0的文件写操作目前做了一个加密程序,发现加密后写到文件中,再从文件读入后不能解密,经过分

不可思议的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
[解决办法]
那你就不能使用字串变量,使用字节数组
[解决办法]

引用:
Quote: 引用:

你确定在
Put #1, , s
s有内容么? 或者说s = b 这种赋值可以?


你没看到“Debug.Print "b:" & b(0) & " s:" & AscB(s) & " s1:" & LenB(s1)"这句吗?


写了个例程测试了一下:
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



无法想象,难以理解的vb6.0的文件写操作

楼主找到问题了么?
[解决办法]
引用:
我要的就是为什么会出现这种情况,12楼解答了,我只是很郁闷,vb6会出现这种不一致情况,如果是C就不会出现不一致情况,变量是什么,保存到文件就是什么,

C 中的字符串其实是字符数组,还是 Ansi 编码的;对于弱类型的 C 来说,字符数组就是字节数组。
VB 中的字符串是 BSTR。
根本是两种不同的数据结构,不一样是正常的。

热点排行