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

如何使用VB6复制打开的文件?,vb6,Vb6,我有一个遗留的VB6应用程序,可以将文件附件上载到数据库BLOB字段。除非用户打开了文件,否则它可以正常工作 我尝试创建文件的副本,然后上载该副本,但令我惊讶的是,每当您尝试复制用户打开的文件时,FileCopy过程都会出现“权限被拒绝”错误 这让我大吃一惊,因为您可以在Windows资源管理器中复制打开的文件,并且我假设FileCopy方法使用与资源管理器相同的API调用 无论如何,我的问题是:如何在VB6中复制打开的文件?回答我自己的问题: ,我的答案如下所述 1-将此声明添加到VB文件:

我有一个遗留的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
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