我编的有什么错?

Kevin02003 2003-11-27 11:52:16
下面的程序是我编的拷贝文件的函数,可是令我遗憾的是,拷贝过去文件的内容和大小都不对!哪位大侠帮我挑一挑毛病?

Private Function CopyFile(fFrom As String, fTo As String) As Boolean
Dim Buf As String, Buf2 As String, FL As Long, I As Long, R As Integer, C As Long

On Error GoTo Copy_File_err
Open fFrom For Binary Access Read As #1
Open fTo For Binary Access Write As #2
FL = LOF(1)
I = Int(FL / 1024)
R = FL Mod 1024
Buf = String(1024, " ")
For C = 1 To I
Get #1, , Buf
Put #2, , Buf
Next C
Buf2 = String(R, " ")
Get #1, , Buf2
Put #2, , Buf2
Close #1
Close #2
CopyFile = True
Exit Function
Copy_File_err:
Close #1
Close #2
MsgBox "文件操作失败!请检查文件是否被占用。", vbOKOnly, "错误"
CopyFile = False
End Function
...全文
56 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigpag 2003-11-29
  • 打赏
  • 举报
回复
//哇赛,这么多招啊!我太感动了!和同行们交流真是有好处啊!
主要是因为问题简单,才会有这么多招儿的:)
IT服务 2003-11-28
  • 打赏
  • 举报
回复
你查一下msdn里有filesystemobject这些东西.
rainstormmaster 2003-11-28
  • 打赏
  • 举报
回复
也可以调用api函数CopyFile:
声明:
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
返回值:
Long,非零表示成功,零表示失败。会设置GetLastError
参数:
lpExistingFileName - String,源文件名

lpNewFileName -- String,目标文件名

bFailIfExists -- Long,如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写

该函数比较简单,我就不写例子了
IT服务 2003-11-28
  • 打赏
  • 举报
回复
Dim FSO As Object
Dim Folder As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\INID_share\KAIINUPD")
xDotNet 2003-11-28
  • 打赏
  • 举报
回复
Dim file() As Byte
......
用 byte 会不会好一点呢?

照上面的看-->还是用 filecopy 方便一点!
IT服务 2003-11-28
  • 打赏
  • 举报
回复
可以把文件从一个地方move到另一个地方.
rainstormmaster 2003-11-28
  • 打赏
  • 举报
回复
Private Function CopyFile(fFrom As String, fTo As String) As Boolean
Dim Buf() As Byte, FL As Long
FL = filelen(fFrom)
redim buff(FL-1)
On Error GoTo Copy_File_err
Open fFrom For Binary Access Read As #1
Open fTo For Binary Access Write As #2
Get #1, , Buf
Put #2, , Buf
Close #2
Close #1
CopyFile = True
Exit Function
Copy_File_err:
Close #1
Close #2
MsgBox "文件操作失败!请检查文件是否被占用。", vbOKOnly, "错误"
CopyFile = False
End Function


IT服务 2003-11-28
  • 打赏
  • 举报
回复
还可以用name 命令呢.
Kevin02003 2003-11-28
  • 打赏
  • 举报
回复
我做了修改,哎!还是不行!原来是568字节变成了1591字节!

Private Function CopyFile(fFrom As String, fTo As String) As Boolean
Dim Buf(0 To 1023) As Byte, FL As Long, I As Long, R As Integer, C As Long

On Error GoTo Copy_File_err
Open fFrom For Binary Access Read As #1
Open fTo For Binary Access Write As #2
FL = LOF(1)
I = Int(FL / 1024)
R = FL Mod 1024
For C = 1 To I
Get #1, 1024, Buf
Put #2, 1024, Buf
Next C
Get #1, R, Buf
Put #2, R, Buf
Close #1
Close #2
CopyFile = True
Exit Function
Copy_File_err:
Close #1
Close #2
MsgBox "文件操作失败!请检查文件是否被占用。", vbOKOnly, "错误"
CopyFile = False
End Function

of123 2003-11-28
  • 打赏
  • 举报
回复
你的问题在于你使用了String作为缓冲区。在西文操作系统下可以,但是在中文系统下处理二进制文件一定会出错。操作系统会自作聪明地按字符处理你的数据,遇到不存在的内码,会自动处理为"?"。
用Byte数组试试。
liuhuabb 2003-11-28
  • 打赏
  • 举报
回复
我拷贝的文件是 .DBF文件,text可能看不出来错误吧,我觉得。
FileCopy我试了,挺好的,就是没有返回值,大概用on error处理异常
我同意同意他的看法
Kevin02003 2003-11-28
  • 打赏
  • 举报
回复
那我用String 为啥不行呀?
拷贝的问题倒是解决了,用FileCopy 挺好,可是这个Get Put String到底
那里有问题,是什么问题?以后编程也会用到的,拷贝只是一个简单应用
阿。
pigpag 2003-11-28
  • 打赏
  • 举报
回复
还有,当然要用Byte()啊!(原以为你就是用Byte()的)

总之,就算用API也比这个要安全。建议用FileCopy
pigpag 2003-11-28
  • 打赏
  • 举报
回复
下标是整型,大小不能超过65535,所以超过64K的文件必须得分批拷贝
jlsg 2003-11-28
  • 打赏
  • 举报
回复
这个问题
http://expert.csdn.net/Expert/topic/2505/2505857.xml?temp=.8891413
帮帮忙
zs8816685 2003-11-28
  • 打赏
  • 举报
回复
多此一举,用FileCopy完全可以。
Kevin02003 2003-11-28
  • 打赏
  • 举报
回复
哇赛,这么多招啊!我太感动了!和同行们交流真是有好处啊!
怎么结账?
program2100 2003-11-27
  • 打赏
  • 举报
回复
看不出来,楼主单步调试过吗?
TimLee✿ 2003-11-27
  • 打赏
  • 举报
回复
555555555555555555555555

同意 lihonggen0(李洪根,MS MVP,标准答案来了)

这样多简单呀~
Kevin02003 2003-11-27
  • 打赏
  • 举报
回复
谢谢!确实不错,有这个命令!怎么给分?
另外,我编的这个程序哪里有问题,能不能帮助我解决呢?
加载更多回复(10)

7,762

社区成员

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

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