我有一个遗留的VB6应用程序,它将文件附件上传到数据库BLOB字段.除非用户打开文件,否则它可以正常工作.
我尝试创建该文件的副本,然后上传该副本,但令我惊讶的是,每当您尝试复制用户打开的文件时,FileCopy过程都会收到"权限被拒绝"错误.
这让我很惊讶,因为您可以在Windows资源管理器打开时复制文件,我假设FileCopy方法使用与资源管理器相同的API调用.
无论如何,我的问题是:如何在VB6中复制打开的文件?
回答我自己的问题:
基于这篇文章,下面介绍了适用于我的答案.
1 - 将此声明添加到VB文件:
Declare Function apiCopyFile Lib "kernel32" Alias "CopyFileA" _
(ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
3 - 将我之前对FileCopy的调用替换为:
CopyFileEvenIfOpen sourceFile, tempFile
Run Code Online (Sandbox Code Playgroud)