如何使用VB6复制打开的文件?

Jos*_*ons 3 vb6

我有一个遗留的VB6应用程序,它将文件附件上传到数据库BLOB字段.除非用户打开文件,否则它可以正常工作.

我尝试创建该文件的副本,然后上传该副本,但令我惊讶的是,每当您尝试复制用户打开的文件时,FileCopy过程都会收到"权限被拒绝"错误.

这让我很惊讶,因为您可以在Windows资源管理器打开时复制文件,我假设FileCopy方法使用与资源管理器相同的API调用.

无论如何,我的问题是:如何在VB6中复制打开的文件?

Jos*_*ons 5

回答我自己的问题:

基于这篇文章,下面介绍了适用于我的答案.

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)

  • 我喜欢让这些小包装程序就像本机VB6例程一样.如果源文件不存在,我会引发错误,而不是显示消息框.另外,我会检查Result <> 0(表示复制失败),并在这种情况下也引发错误. (2认同)