文件复制的一些资料

来源:互联网 发布:网络连环夺宝技巧 编辑:程序博客网 时间:2024/05/08 15:37

可以用shell把它交给dos来完成吗?

shell "cmd.exe /c copy 源文件 目录文件"

这样就可以把本程序给释放出来了

--------------------------------------------------------------------

VB编程来实现文件的复制与重命名

filecopy   "c:/1.txt","d:/2.txt"  
  name   "c:/1.txt"   as   "c:/2.txt"

-------------------------------------------------------------------

实现文件复制的时候如果该文件已存在,就不能进行

方法一  :    if   dir("filename")<>""   then   kill("filename") 

方法二  :   

Declare   Function   CopyFile   Lib   "kernel32"   Alias   "CopyFileA"   (ByVal   lpExistingFileName   As   String,   ByVal   lpNewFileName   As   String,   ByVal   bFailIfExists   As   Long)   As   Long  
   
  CopyFile   "源文件","目标文件",False  
  False表示如果目标文件已存在,则覆盖它。 

--------------------------------------------------------------------------

复制文件夹的全部文件到新的文件夹中

方法一 :

 Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")
  fso.CopyFolder "c:/mydocuments/letters/*", "c:/tempfolder/"
说明c:/mydocuments/letters/*为原文件夹路径;c:/tempfolder/为目标路径

方法二:

set object=createobject("scripting.filesystemobject")子 ‘建立一个文件库
set folder=object.createfolder("d:/123")  '在D盘建立一个新文件
set m=object.getfolder("d:/123") '获取D:/下面的123文件夹
m.copy("c:/temp/")

--------------------------------------------------------------------------

 

VB与Windows资源管理器互拷文件

       通过VB编程来拷贝或移动文件的原理可能大家都十分清楚,可以利用Windows   API  
  SHFileOperation来进行操作,也可以利用VB内置的函数来操作。但是利用这些方法编  
  写的程序只能在程序内部执行文件的操作。这里我要向大家介绍如何通过VB编程将程序  
  中的文件操作同Windows的资源管理器中的拷贝、剪切操作连接起来。  
          在Windows的资源管理器中,选中一个或多个文件,在文件上单击鼠标右键,在弹  
  出菜单中选复制。再切换到另外的目录,单击鼠标右键,点粘贴。就执行了一次文件的  
  拷贝操作,那么Windows在拷贝过程中执行了什么操作,是否将整个文件拷贝到剪贴版  
  上了呢?当然没有。实际上,windows只是将一个文件结构拷贝到了剪贴版,这个结构  
  如下:  
          tDropFile+文件1文件名+vbNullChar文件2文件名+vbNullChar...+文件N文件名+vbNullChar  
  其中tDropFile是一个DROPFILES结构,这个结构在Windows   API中有定义。在粘贴文件  
  时,利用API函数   DragQueryFile   就可以获得拷贝到剪贴版的文件全路径名,然后就  
  可以根据获得的文件名执行文件拷贝函数,实现对文件的粘贴操作。  
          下面通过具体的程序来介绍:  
          1、在工程文件中加入一个Module,然后在Module中加入如下代码:  
  Option   Explicit  
   
  Private   Type   POINTAPI  
        x   As   Long  
        y   As   Long  
  End   Type  
   
  Private   Type   SHFILEOPSTRUCT  
          hwnd   As   Long  
          wFunc   As   Long  
          pFrom   As   String  
          pTo   As   String  
          fFlags   As   Integer  
          fAnyOperationsAborted   As   Long  
          hNameMappings   As   Long  
          lpszProgressTitle   As   String  
  End   Type  
   
  Private   Declare   Function   SHFileOperation   Lib   "shell32.dll"   Alias   _  
                  "SHFileOperationA"   (lpFileOp   As   SHFILEOPSTRUCT)   As   Long  
   
  '剪贴版处理函数  
  Private   Declare   Function   EmptyClipboard   Lib   "user32"   ()   As   Long  
  Private   Declare   Function   OpenClipboard   Lib   "user32"   (ByVal   hwnd   _  
                  As   Long)   As   Long  
  Private   Declare   Function   CloseClipboard   Lib   "user32"   ()   As   Long  
  Private   Declare   Function   SetClipboardData   Lib   "user32"   (ByVal   wFormat   _  
                  As   Long,   ByVal   hMem   As   Long)   As   Long  
  Private   Declare   Function   GetClipboardData   Lib   "user32"   (ByVal   wFormat   _  
                  As   Long)   As   Long  
  Private   Declare   Function   IsClipboardFormatAvailable   Lib   "user32"   _  
                  (ByVal   wFormat   As   Long)   As   Long  
   
  Private   Declare   Function   DragQueryFile   Lib   "shell32.dll"   Alias   _  
                  "DragQueryFileA"   (ByVal   hDrop   As   Long,   ByVal   UINT   As   Long,   _  
                  ByVal   lpStr   As   String,   ByVal   ch   As   Long)   As   Long  
  Private   Declare   Function   DragQueryPoint   Lib   "shell32.dll"   (ByVal   _  
                  hDrop   As   Long,   lpPoint   As   POINTAPI)   As   Long  
  Private   Declare   Function   GlobalAlloc   Lib   "kernel32"   (ByVal   wFlags   _  
                  As   Long,   ByVal   dwBytes   As   Long)   As   Long  
  Private   Declare   Function   GlobalFree   Lib   "kernel32"   (ByVal   hMem   As   _  
                  Long)   As   Long  
  Private   Declare   Function   GlobalLock   Lib   "kernel32"   (ByVal   hMem   As   _  
                  Long)   As   Long  
  Private   Declare   Function   GlobalUnlock   Lib   "kernel32"   (ByVal   hMem   As   _  
                  Long)   As   Long  
  Private   Declare   Sub   CopyMem   Lib   "kernel32"   Alias   "RtlMoveMemory"   _  
                  (Destination   As   Any,   Source   As   Any,   ByVal   Length   As   Long)  
   
  '剪贴版数据格式定义  
  Private   Const   CF_TEXT   =   1  
  Private   Const   CF_BITMAP   =   2  
  Private   Const   CF_METAFILEPICT   =   3  
  Private   Const   CF_SYLK   =   4  
  Private   Const   CF_DIF   =   5  
  Private   Const   CF_TIFF   =   6  
  Private   Const   CF_OEMTEXT   =   7  
  Private   Const   CF_DIB   =   8  
  Private   Const   CF_PALETTE   =   9  
  Private   Const   CF_PENDATA   =   10  
  Private   Const   CF_RIFF   =   11  
  Private   Const   CF_WAVE   =   12  
  Private   Const   CF_UNICODETEXT   =   13  
  Private   Const   CF_ENHMETAFILE   =   14  
  Private   Const   CF_HDROP   =   15  
  Private   Const   CF_LOCALE   =   16  
  Private   Const   CF_MAX   =   17  
   
  '   内存操作定义  
  Private   Const   GMEM_FIXED   =   &H0  
  Private   Const   GMEM_MOVEABLE   =   &H2  
  Private   Const   GMEM_NOCOMPACT   =   &H10  
  Private   Const   GMEM_NODISCARD   =   &H20  
  Private   Const   GMEM_ZEROINIT   =   &H40  
  Private   Const   GMEM_MODIFY   =   &H80  
  Private   Const   GMEM_DISCARDABLE   =   &H100  
  Private   Const   GMEM_NOT_BANKED   =   &H1000  
  Private   Const   GMEM_SHARE   =   &H2000  
  Private   Const   GMEM_DDESHARE   =   &H2000  
  Private   Const   GMEM_NOTIFY   =   &H4000  
  Private   Const   GMEM_LOWER   =   GMEM_NOT_BANKED  
  Private   Const   GMEM_VALID_FLAGS   =   &H7F72  
  Private   Const   GMEM_INVALID_HANDLE   =   &H8000  
  Private   Const   GHND   =   (GMEM_MOVEABLE   Or   GMEM_ZEROINIT)  
  Private   Const   GPTR   =   (GMEM_FIXED   Or   GMEM_ZEROINIT)  
   
  Private   Const   FO_COPY   =   &H2  
   
  Private   Type   DROPFILES  
        pFiles   As   Long  
        pt   As   POINTAPI  
        fNC   As   Long  
        fWide   As   Long  
  End   Type  
   
  Public   Function   clipCopyFiles(Files()   As   String)   As   Boolean  
        Dim   data   As   String  
        Dim   df   As   DROPFILES  
        Dim   hGlobal   As   Long  
        Dim   lpGlobal   As   Long  
        Dim   i   As   Long  
         
        '清除剪贴版中现存的数据  
        If   OpenClipboard(0&)   Then  
                  Call   EmptyClipboard  
               
                  For   i   =   LBound(Files)   To   UBound(Files)  
                          data   =   data   &   Files(i)   &   vbNullChar  
                  Next   i  
                  data   =   data   &   vbNullChar  
   
                  '为剪贴版拷贝操作分配相应大小的内存  
                  hGlobal   =   GlobalAlloc(GHND,   Len(df)   +   Len(data))  
                  If   hGlobal   Then  
                          lpGlobal   =   GlobalLock(hGlobal)  
                     
                          df.pFiles   =   Len(df)  
          '将DropFiles结构拷贝到内存中  
                          Call   CopyMem(ByVal   lpGlobal,   df,   Len(df))  
          '将文件全路径名拷贝到分配的内存中。  
                          Call   CopyMem(ByVal   (lpGlobal   +   Len(df)),   ByVal   data,   _  
                                  Len(data))  
                          Call   GlobalUnlock(hGlobal)  
                     
                          '将数据拷贝到剪贴版上  
          If   SetClipboardData(CF_HDROP,   hGlobal)   Then  
                                  clipCopyFiles   =   True  
                          End   If  
                  End   If  
                  Call   CloseClipboard  
          End   If  
  End   Function  
   
  Public   Function   clipPasteFiles(Files()   As   String)   As   Long  
        Dim   hDrop   As   Long  
        Dim   nFiles   As   Long  
        Dim   i   As   Long  
        Dim   desc   As   String  
        Dim   filename   As   String  
        Dim   pt   As   POINTAPI  
        Dim   tfStr   As   SHFILEOPSTRUCT  
        Const   MAX_PATH   As   Long   =   260  
         
        '确定剪贴版的数据格式是文件,并打开剪贴版  
        If   IsClipboardFormatAvailable(CF_HDROP)   Then  
                  If   OpenClipboard(0&)   Then  
                          hDrop   =   GetClipboardData(CF_HDROP)  
                          '获得文件数  
                          nFiles   =   DragQueryFile(hDrop,   -1&,   "",   0)  
               
                          ReDim   Files(0   To   nFiles   -   1)   As   String  
                          filename   =   Space(MAX_PATH)  
                     
                          '确定执行的操作类型为拷贝操作  
          tfStr.wFunc   =   FO_COPY  
          '目的路径设置为File1指定的路径  
                          tfStr.pTo   =   Form1.File1.Path  
                     
                          For   i   =   0   To   nFiles   -   1  
  '根据获取的每一个文件执行文件拷贝操作  
                                  Call   DragQueryFile(hDrop,   i,   filename,   Len(filename))  
                                  Files(i)   =   TrimNull(filename)  
                                  tfStr.pFrom   =   Files(i)  
                                  SHFileOperation   tfStr  
                          Next   i  
                          Form1.File1.Refresh  
                          Form1.Dir1.Refresh  
                     
                          Call   CloseClipboard  
                  End   If  
                  clipPasteFiles   =   nFiles  
          End   If  
  End   Function  
   
  Private   Function   TrimNull(ByVal   StrIn   As   String)   As   String  
        Dim   nul   As   Long  
         
        nul   =   InStr(StrIn,   vbNullChar)  
        Select   Case   nul  
              Case   Is   >   1  
                    TrimNull   =   Left(StrIn,   nul   -   1)  
              Case   1  
                    TrimNull   =   ""  
              Case   0  
                    TrimNull   =   Trim(StrIn)  
        End   Select  
  End   Function  
   
          2、在Form1中加入一个FileListBox,Name属性设置为File1。加入一个DirListBox,  
  Name属性设置为Dir1,在Dir1的Change事件中加入如下代码:  
  Private   Sub   Dir1_Change()  
        File1.Path   =   Dir1.Path  
  End   Sub  
  加入一个DriveListBox,Name属性设置为Drive1,在Drive1的Change事件中加入如下  
  代码:  
  Private   Sub   Drive1_Change()  
        Dir1.Path   =   Drive1.Drive  
  End   Sub  
  加入一个CommandButton,Name属性设置为cmdCopy,在cmdCopy的Click事件中加入如下  
  代码:  
  Private   Sub   cmdCopy_Click()  
        Dim   Files()   As   String  
        Dim   Path   As   String  
        Dim   i   As   Long,   n   As   Long  
         
        Path   =   Dir1.Path  
        If   Right(Path,   1)   <>   "/"   Then  
              Path   =   Path   &   "/"  
        End   If  
         
        '根据在List1上的选择建立拷贝文件的列表  
        With   File1  
              For   i   =   0   To   .ListCount   -   1  
                    If   .Selected(i)   Then  
                          ReDim   Preserve   Files(0   To   n)   As   String  
                          Files(n)   =   Path   &   .List(i)  
                          n   =   n   +   1  
                    End   If  
              Next   i  
        End   With  
         
        '拷贝文件到Clipboard  
        If   clipCopyFiles(Files)   Then  
              MsgBox   "拷贝文件成功.",   ,   "Success"  
        Else  
              MsgBox   "无法拷贝文件...",   ,   "Failure"  
        End   If  
  End   Sub  
  加入一个CommandButton,Name属性设置为cmdPaste,在cmdPaste的Click事件中加入如  
  下代码:  
  Private   Sub   cmdPaste_Click()  
        Dim   Files()   As   String  
        Dim   nRet   As   Long  
        Dim   i   As   Long  
        Dim   msg   As   String  
         
        nRet   =   clipPasteFiles(Files)  
        If   nRet   Then  
              For   i   =   0   To   nRet   -   1  
                    msg   =   msg   &   Files(i)   &   vbCrLf  
              Next   i  
              MsgBox   msg,   ,   "共粘贴"   &   nRet   &   "个文件"  
        Else  
              MsgBox   "从剪贴版粘贴文件错误",   ,   "Failure"  
        End   If  
  End   Sub  
   
          运行文件,在Windows   资源管理器中,选择文件,再在资源管理器菜单中选   编辑   |   复制  
  然后在Form1中点击cmdPaste,从资源管理器中复制的文件就拷贝到Dir1所在的目录中。从  
  File1中选择文件,按cmdCopy复制,再在资源管理器中选   编辑   |   粘贴   ,选择的文件就被  
  拷贝到Windows   资源管理器的当前目录下。

原创粉丝点击