----通过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中加入如下代码:
----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 资源管理器的当前目录下。