Byte数组的内容保存到Variant变量中,然后再从该Variant变量中读出来,为什么就不对?

wan_j_zhang 2002-08-17 04:47:10
比如:
dim ssVar() as byte
open "C:\test.doc" for binary as #1
Get #1,,ssVar
Close #1

dim temp as variant
temp=ssVar

Open "d:\test.doc" for binary as #2
put #2,,temp
Close #2

为什么写出来的文件不对?
...全文
45 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
enmity 2002-08-18
  • 打赏
  • 举报
回复
转换成variant等类似的非定长变量,会在写入的数据之前添加该类型的标示和数据的长度。你看看,使用variant后的长度是否比原来的大12个字节?

建议,不要试图用variant作为万能的中介,应该保持数据的类型


2个比较好的Binary 文件读写函数:



Public Function ReadBianryFile(ByVal strFile As String) As Byte()

Dim o_intFileNum As Integer
Dim o_bytContent() As Byte

o_intFileNum = FreeFile()

Open strFile For Binary As #o_intFileNum

ReDim o_bytContent(0 To LOF(o_intFileNum) - 1)

Get #o_intFileNum, , o_bytContent

Close #o_intFileNum

ReadBianryFile = o_bytContent

End Function


Public Function WriteBianryFile(ByVal strFile As String, _
ByRef bytContent() As Byte) As Boolean

Dim o_intFileNum As Integer
Dim o_bytContent() As Byte

o_intFileNum = FreeFile()

Open strFile For Binary As #o_intFileNum

Put #o_intFileNum, , bytContent

Close #o_intFileNum

WriteBianryFile = True

End Function

陈杰Damon 2002-08-17
  • 打赏
  • 举报
回复
上面写错了,应该是:
ReDim ssVar(FileLen("C:\test.doc") - 1)
陈杰Damon 2002-08-17
  • 打赏
  • 举报
回复
Byte数组未分配空间,导致错误,加一句:
ReDim ssVar(FileLen(1) - 1)
dengwei007 2002-08-17
  • 打赏
  • 举报
回复
确实如此,我也碰到过这样的问题,如果文件是全English的文本文件就没有问题,不过DOC肯定会有了!具体原因不好解释(一下子说不清),你只要弄明白midB和mid的问题就懂了。
a="中"
b=midB(a,1)+midB(a,2)
c=mid(a,1)+mid(a,2)
看看b,c各是什么?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧