----通过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 资源管理器的当前目录下。