如果存在,检查目标文件夹中的文件

时间:2010-09-16 07:46:16

标签: vb6

我正在尝试确定从源文件夹复制到目标文件的文件数,然后使用下面的代码将此值分配给progressbar.max.But我得到运行时错误5,无效的过程调用或参数在标记的位置。请指导

Private Sub cmdCopy_Click()
Dim sFileName As String    'Source File
Dim sDirName As String     'Source Directory
Dim dDirName As String     'Destination Directory
Dim fiFileCount As Integer 'Number of Files to be copied
Dim fbFileMatch As Boolean

If prgFCount.Visible = True Then prgFCount.Visible = False

dDirName = "D:\Destination\"
sDirName = "C:\Source\"
sFileName = Dir(sDirName)


' Disable this button so the user cannot
' start another copy.
cmdCopy.Enabled = False
cmdCancel.Enabled = True
fiFileCount = 0

Do While Len(sFileName) > 0
fbFileMatch = False
If Len(Dir$(dDirName & sFileName)) > 0 Then
fbFileMatch = True
End If
If fbFileMatch = False Then
fiFileCount = fiFileCount + 1
End If

sFileName = Dir '## Error at this Point ##
Loop
If fiFileCount = 0 Then
cmdCopy.Enabled = True
cmdCancel.Enabled = False
Exit Sub
End If
prgFCount.Min = 0
prgFCount.Max = fiFileCount
prgFCount.Visible = True
End Sub

2 个答案:

答案 0 :(得分:2)

If Len(Dir$(dDirName & sFileName)) > 0 Then

使用以下行设置目录迭代:

sFileName = Dir(sDirName)

调用不带参数的 Dir 功能将获得符合文件名模式的下一项,并检索属性。 Len(Dir $电话搞砸了。

我建议重写代码以遍历源文件夹中的所有文件并构建列表,然后遍历列表并在目标文件夹中查找匹配项。

这样的事情:

...
sFileName = Dir$(sDirName)
Do While Len(sFileName) > 0
   i = i + 1
   ReDim Preserve strSourceFileList(i)
   strSourceFileList(i) = sFileName
   sFileName = Dir()
Loop

If i > 0 Then
   For i = LBound(strSourceFileList) To UBound(strSourceFileList)
      sFileName = Dir$(dDirName & strSourceFileList(i))
      If Len(sFileName) = 0 Then
         fiFileCount = fiFileCount + 1
      End If
   Next i
End If
...

答案 1 :(得分:1)

Dir返回匹配文件,目录或文件夹的名称。 调用Dir应该没问题,但在你的情况下会产生错误。

您还没有实现循环以通过所有可用的源文件进行迭代。

使用FileSystemObject是其中一个选项。 要使用FileSystemObject,请点击项目菜单选项,然后点击参考文献... 菜单选项。 这将打开引用对话框

勾选名为“ Microsoft Scripting Runtime ”的参考旁边的框,然后点击确定

现在您可以将变量声明为FileSystemObject。此外,您还可以访问更多对象,例如FileFolderFiles等。

使用FileSystemObject可以访问各种功能。

下面的代码演示了如何使用FileSystemObject获取目的地中不存在且将被复制的文件数。

Private Sub cmdCopy_Click()
    Dim fso As New FileSystemObject
    Dim sourceFolder As Folder
    Dim sourceFile As File
    Dim destinationFolder As Folder
    Dim filesToBeCopied As Integer

    Set sourceFolder = fso.GetFolder("C:\-- Temp --\Source")
    Set destinationFolder = fso.GetFolder("C:\-- Temp --\Destination")

    filesToBeCopied = 0

    ' Iterrate through each file in the source folder.
    For Each sourceFile In sourceFolder.Files
        ' Check if the source file exists in the destination folder
        If Not (fso.FileExists(destinationFolder + "\" + sourceFile.Name)) Then
            filesToBeCopied = filesToBeCopied + 1
        End If
    Next
End Sub

我已经测试了上面的代码,它正确地将filesToBeCopied的数量增加到预期的数量。