VB的高手指点一下,文件保存时的怪问题?

eeff 2001-11-24 01:39:55
情况是这样的:

现在在variant 型的变量fileValue中有一个二进制的数据(就是一个文件的内容),长度为lenb(fileValue)。现在,我要把这个值保存到一个以fileName为文件名的文件中,我试了用Scripting.filesystem,与open put 的方法都出现相同的问题:保存后长度大了几个字节或更多,更少,就是没有正确过(除了文本)。最后,我采用:
Open RPath For Binary As #1
For i = 1 To filesize
c = AscB(MidB(filevalue, i))
Put #1, , c
Next
Close #1
一个字节一个字节的方式保存。这个对一个小文件还可以,可是对一个大的文件就不行了,太慢了。
请您赐教!给我一个解脱!谢谢!!!
...全文
188 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
eeff 2001-11-27
  • 打赏
  • 举报
回复
TO:enmity(灵感之源)
我已给你发邮件了,为什么不回复!
slithe 2001-11-27
  • 打赏
  • 举报
回复
试试看这个方法行不行
private sub command1_click()
dim varOutput As Double
varOutput = Val(Text1.Text) ' 假设你要保存得东西在textbox中
on Error GoTo FileError
Open "c:\a.dat" For Binary As #1
Put #1,,varOutput
Close #1
Exit Sub
FileError:
MsgBox "notice!!"
End Sub
slithe 2001-11-27
  • 打赏
  • 举报
回复
试试看这个方法行不行
private sub command1_click()
守破之间 2001-11-27
  • 打赏
  • 举报
回复
不会取到字符串变量中去呀!
eeff 2001-11-27
  • 打赏
  • 举报
回复
尚未解决,请继续关注!
allan1031 2001-11-27
  • 打赏
  • 举报
回复
试试用line啊,用你那个似乎只能保存1024左右
再大就不可以了。
eeff 2001-11-27
  • 打赏
  • 举报
回复
问题已解决,谢谢各位,特别要谢谢enmity(灵感之源),

主要问题下面代码中加下划线的三行代码,不仅正确,而且比我用一个字节一个字节保存的方法效率高了很多倍(以前简直太慢了),但是我想问一下高手,这是为什么,原因呢?

bytFileBuffer() = getFieldValue(strName)

Put #1, 1, bytFileBuffer()
这两句以前还从没用过,绝!!!

结果如下:
----------------------------
Public Function savetoFile(strName As String, strFilePath As String, strFileName As String, blnOverWrite As Boolean) As Boolean
'把strName项的值保存到文件strFileName中,并说明是否覆盖存在的文件
'要求strFielPath是带盘符的绝对路径,最后以\结尾
Dim RPath As String
Dim filesize As Long
Dim fs As Scripting.FileSystemObject

Dim bytFileBuffer() As Byte
'---------------------------------------------
' dim FileValue as variant

On Error GoTo error_handle

filesize = getFieldSize(strName)
RPath = strFilePath & strFileName '包含文件名的文件路径

ReDim bytFileBuffer(filesize)

bytFileBuffer() = getFieldValue(strName)
'--------------------------------------------------
' filevalue=getFieldValue(strName)


Set fs = New Scripting.FileSystemObject

If (fs.FileExists(RPath) And blnOverWrite = False) Then '检查是否有相同的文件名的文件存在
strLastError = "文件已经存在!"
Err.Raise 1
End If

Open RPath For Binary As #1
Put #1, 1, bytFileBuffer()
'------------------------------------------------
' Put #1, , FileValue
Close #1
savetoFile = True

Exit Function
error_handle:
strLastError = "文件保存失败"
savetoFile = False
End Function

woookaooo 2001-11-27
  • 打赏
  • 举报
回复
我就是声明的Byte数组,但是文件长度仍不对,为什么?!
ltpao 2001-11-27
  • 打赏
  • 举报
回复
把变量声明成Byte数组即可
enmity 2001-11-27
  • 打赏
  • 举报
回复
发给你了,匆忙之间做的,有什么问题,再告诉我,别介意 :)
enmity 2001-11-27
  • 打赏
  • 举报
回复
吖?有吗?我看看
eeff 2001-11-26
  • 打赏
  • 举报
回复
11
eeff 2001-11-26
  • 打赏
  • 举报
回复
TO:gameboy999(我心迷茫) 

可是fileValue中的值是从别的组件接口返回的呀!对于来源不能施加控制。

gameboy999 2001-11-26
  • 打赏
  • 举报
回复
读取文件时为什么不用byte数组(get就可以了)??

Vairant可能不会智慧到知道里面是否是二进制数据
eeff 2001-11-24
  • 打赏
  • 举报
回复
To:hdj0569(猫)
可在fileValue中已经是二进制的啦,而且,fileValue也是Variant

我最想知道的是不论是用Scripting.FileSystemObject还是put的老方法,它是如果处理我的数据的,这个过程到底怎么回事,我是否可以施加控制。
比如说:Vaiant是不是和String(BSTR)一样的存在内存中,程序是从哪一个字节开始读数据,如何。。。。

高手就说说嘛!大家共同学习!
hdj0569 2001-11-24
  • 打赏
  • 举报
回复
还有,put 的第二个参数最好自己控制。
hdj0569 2001-11-24
  • 打赏
  • 举报
回复
字节操作时注意
用cbyte(值)强制转换格式

例:
put 1,,cbyte(data)
enmity 2001-11-24
  • 打赏
  • 举报
回复
慢慢来吧,我等你的信。
eeff 2001-11-24
  • 打赏
  • 举报
回复
气死啦!公司邮件服务器有问题,发不了!怎么办呀
enmity 2001-11-24
  • 打赏
  • 举报
回复
这个问题,我遇到过,给我email,我详细回复你。
unruledboy@netease.com
加载更多回复(2)

7,759

社区成员

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

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