1,488
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Const MAX_PATH As Long = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Declare Function CreateDirectory Lib "kernel32" _
Alias "CreateDirectoryA" _
(ByVal lpPathName As String, _
lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Declare Function CopyFile Lib "kernel32" _
Alias "CopyFileA" _
(ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32" _
Alias "FindFirstFileA" _
(ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" _
Alias "FindNextFileA" _
(ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" _
(ByVal hFindFile As Long) As Long
'*****************************************************************
'文件复制函数,允许通配符
Public Function yidieCopyFiles(sSourcePath As String, _
sDestination As String, _
sFiles As String) As Long
Dim WFD As WIN32_FIND_DATA
Dim SA As SECURITY_ATTRIBUTES
Dim r As Long
Dim hFile As Long
Dim bNext As Long
Dim copied As Long
Dim currFile As String
'目标文件不存在则创建目录
Call CreateDirectory(sDestination, SA)
'在源目录中找出要复制的文件
hFile = FindFirstFile(sSourcePath & sFiles, WFD)
If (hFile = INVALID_HANDLE_VALUE) Then
'没有符合要求的文件
'MsgBox "找不到 " & sFiles & " 类型的文件!"
Exit Function
End If
'逐个复制文件至目标目录
If hFile Then
Do
'去掉文件名末尾空白字符
currFile = Left$(WFD.cFileName, InStr(WFD.cFileName, Chr$(0)))
'复制文件并统计复制的个数
Call CopyFile(sSourcePath & currFile, sDestination & currFile, False)
copied = copied + 1
'搜索下一文件
bNext = FindNextFile(hFile, WFD)
Loop Until bNext = 0
End If
'关闭搜索
Call FindClose(hFile)
'返回文件复制的个数
yidieCopyFiles = copied
Debug.Print "copy:" & copied
End Function