如何使用VB6复制打开的文件?
我有一个遗留的VB6应用程序,可以将文件附件上载到数据库BLOB字段。除非用户打开了文件,否则它可以正常工作 我尝试创建文件的副本,然后上载该副本,但令我惊讶的是,每当您尝试复制用户打开的文件时,FileCopy过程都会出现“权限被拒绝”错误 这让我大吃一惊,因为您可以在Windows资源管理器中复制打开的文件,并且我假设FileCopy方法使用与资源管理器相同的API调用如何使用VB6复制打开的文件?,vb6,Vb6,我有一个遗留的VB6应用程序,可以将文件附件上载到数据库BLOB字段。除非用户打开了文件,否则它可以正常工作 我尝试创建文件的副本,然后上载该副本,但令我惊讶的是,每当您尝试复制用户打开的文件时,FileCopy过程都会出现“权限被拒绝”错误 这让我大吃一惊,因为您可以在Windows资源管理器中复制打开的文件,并且我假设FileCopy方法使用与资源管理器相同的API调用 无论如何,我的问题是:如何在VB6中复制打开的文件?回答我自己的问题: ,我的答案如下所述 1-将此声明添加到VB文件:
无论如何,我的问题是:如何在VB6中复制打开的文件?回答我自己的问题: ,我的答案如下所述 1-将此声明添加到VB文件:
Declare Function apiCopyFile Lib "kernel32" Alias "CopyFileA" _
(ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
2-为该函数创建一个小包装器,如下所示:
Sub CopyFileEvenIfOpen(SourceFile As String, DestFile As String)
Dim Result As Long
If Dir(SourceFile) = "" Then
MsgBox Chr(34) & SourceFile & Chr(34) & " is not valid file name."
Else
Result = apiCopyFile(SourceFile, DestFile, False)
End If
End Sub
3-将我以前对FileCopy的调用替换为以下内容:
CopyFileEvenIfOpen sourceFile, tempFile
如果您希望在不使用api的情况下执行相同的操作: 函数SharedFilecopy(ByVal SourcePath作为字符串,ByVal DestinationPath作为字符串) exitcopy:
Close #FF1, #FF2
退出功能
错误副本:
ErrCount=ErrCount+1
如果错误计数>2000,则
SharedFilecopy = False
Resume exitcopy
否则
如果结束
结束功能较短的解决方案:
1-项目->参考。选中“Microsoft脚本运行时”
2-使用此选项:
Dim fso As New FileSystemObject
fso.CopyFile file1, file2
我喜欢让这些小包装器例程像本地VB6例程一样工作。如果源文件不存在,我将引发一个错误,而不是显示一个消息框。此外,我还将检查结果是否为0(这表示复制失败),并在这种情况下引发错误。
Resume
Dim fso As New FileSystemObject
fso.CopyFile file1, file2