请教各位高手:如何在VB程序中实现同时拷贝多个文件的目地呢?我的意思是说:在一个文件刚开始拷贝的时候,又开始另一个文件的拷贝.多个文件同时进行拷贝,相互不影响的进行.
在VB程序中有个filecopy函数,但它好像只能进行一个文件的拷贝,不能进行多文件的同时拷贝,我听说使用shell函数可以实现,但只能进行如.exe,.com等几个规定格式的文件操作.也不能实现拷贝功能.
请教高手:如何在VB中实现多文件的同时拷贝呢?相互不影响的.请高手指点迷津.并给个例子代码.多谢!

解决方案 »

  1.   

    '这种用windows自带的XCOPY 最方便了,能拷整个文件夹与它下面的子文件夹,要完全用vb代码来写太累人了也没这个必要,除非你还要逐个判断文件的属性.'下例是将你的 c:\test\下面的所有文件拷到 c:\test2 如果 c:\test2不存在也会自动建立.Private Sub Command1_Click()
       Call Shell("xcopy c:\test\*.*/s/e c:\test2\", vbHide)
    End Sub
      

  2.   

    补充一点, 因为 XCOPY 它是在DOS下运行的, DOS不支持长路径名.因此,如果你要将文件拷到Program Files 或 Document....等的具有长路径名时,上面的代码无效,要用下面这个代码.'这个代码是将你的 c:\test\下面的所有文件含子文件,拷到 Program Files下的 test文件夹内Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
    Dim lRetVal&, sShortPathName$, iLen%
    Private Sub Command1_Click()
       Call Shell("xcopy c:\test\*.*/s/e " & GetShortName(Environ("programfiles")) & "\test\", vbHide)
    End SubPublic Function GetShortName(ByVal sLongFileName As String) As String
       sShortPathName = Space(255)
       iLen = Len(sShortPathName)
       lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
       GetShortName = Left(sShortPathName, lRetVal)
    End Function
      

  3.   


    个人觉得,有可能这样的话会让速度更慢.磁头同一时间只能在一个位置读写,如果你同时并发多个文件复制,可能还让磁头更低效率了.除非你在复制时,针对文件存储的物理位置进行优化,让磁头走最短的路,来完成文件复制,就是类似NCQ功能.
      

  4.   

    2F 代码发现一个小问题, 更正如下:Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
    Dim lRetVal&, sShortPathName$, iLen%
    Private Sub Command1_Click()
       Call Shell("xcopy c:\test\*.*/s/e " & GetShortName(Environ("programfiles")) & "\test\", vbHide)
       '下面这行是如果两个路径都是长路径时的用法
       'Call Shell("xcopy " & GetShortName(Environ("programfiles")) & "\test\*.*/s/e " & GetShortName(Environ("programfiles")) & "\test2\", vbHide)
    End SubPublic Function GetShortName(ByVal sLongFileName As String) As String
       sShortPathName = Space(255)
       iLen = Len(sShortPathName)
       Call GetShortPathName(sLongFileName, sShortPathName, iLen)
       If InStr(sShortPathName, Chr(0)) > 0 Then
          GetShortName = Mid(sShortPathName, 1, InStr(sShortPathName, Chr(0)) - 1)
       Else
          GetShortName = Trim(sLongFileName)
       End If
    End Function