'**但是 使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。
'**所以在 试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
'**这样,如果目录中还存在目录,多个子目录存在 ,会非常麻烦费事
'**所以,网上就有了 用 DO....LOOP 的解决方案.但是效率不是很高.
'**那么还有没有其他办法呢??
'**方法一: 我们可以用VB结合 MS-DOS的 "RD [/S] [/Q] [drive:]path" 处理文件夹
'**但很难得到返回结果.(至少我的方法麻烦)
'**方法二:
'**这个用了API SHFileOperation函数.
'**他不光有删除文件夹的功力,还有 移动,复制,重命名 等高招.
以下代码在模块
程序代码: | [ 复制代码 ] |
'***********************************************************
'**我们在使用vb要删除文件夹时,msdn说的是用 RmDir 语句删除已存在的目录或文件夹
'**但是 使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。
'**所以在 试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
'**这样,如果目录中还存在目录,多个子目录存在 ,会非常麻烦费事
'**所以,网上就有了 用 DO....LOOP 的解决方案.但是效率不是很高.
'**那么还有没有其他办法呢??
'**方法一: 我们可以用VB结合 MS-DOS的 "RD [/S] [/Q] [drive:]path" 处理文件夹
'**但很难得到返回结果.(至少我的方法麻烦)
'**方法二:
'**这个用了API SHFileOperation函数.
'**他不光有删除文件夹的功力,还有 移动,复制,重命名 等高招.
'***********************************************************
'**模 块 名 DeleteFolders
'**作 用 不光有删除文件夹的功力,还有 移动,复制,重命名 等高招.
'**作 者 石陆
'**制作日期 2007 / 12 / 6
'**修 改
'**修改日期
'**石陆软件屋 http://www.cnng.net
'***********************************************************
Option Explicit
Public Enum FO_Operation
FO_MOVE = 1
FO_COPY = 2
FO_DELETE = 3
FO_RENAME = 4
End Enum
Public Enum FOFlags
FOF_MULTIDESTFILES = &H1 'Destination specifies multiple files
FOF_SILENT = &H4 '不显示进度对话框
FOF_RENAMEONCOLLISION = &H8 'Rename if destination already exists
FOF_NOCONFIRMATION = &H10 '不提醒用户
FOF_WANTMAPPINGHANDLE = &H20 'Fill in hNameMappings member
FOF_ALLOWUNDO = &H40 '如果可能在撤销之前保存信息
FOF_FILESONLY = &H80 'On *.*, 不复制文件夹
FOF_SIMPLEPROGRESS = &H100 '任何文件都不显示名字
FOF_NOCONFIRMMKDIR = &H200 '创建文件不要求确认
End Enum
Public 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 Long ' only used if FOF_SIMPLEPROGRESS
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private op As SHFILEOPSTRUCT
Public Sub DeleteFolder(sDeleteFolder As String, Optional Interface As Boolean = False)
SetAttr sDeleteFolder, vbNormal
With op
.wFunc = FO_DELETE
.pFrom = sDeleteFolder
.fFlags = IIf(Interface = False, FOF_NOCONFIRMATION, FOF_NOCONFIRMATION And FOF_SILENT)
End With
SHFileOperation op
End Sub
'**我们在使用vb要删除文件夹时,msdn说的是用 RmDir 语句删除已存在的目录或文件夹
'**但是 使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。
'**所以在 试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
'**这样,如果目录中还存在目录,多个子目录存在 ,会非常麻烦费事
'**所以,网上就有了 用 DO....LOOP 的解决方案.但是效率不是很高.
'**那么还有没有其他办法呢??
'**方法一: 我们可以用VB结合 MS-DOS的 "RD [/S] [/Q] [drive:]path" 处理文件夹
'**但很难得到返回结果.(至少我的方法麻烦)
'**方法二:
'**这个用了API SHFileOperation函数.
'**他不光有删除文件夹的功力,还有 移动,复制,重命名 等高招.
'***********************************************************
'**模 块 名 DeleteFolders
'**作 用 不光有删除文件夹的功力,还有 移动,复制,重命名 等高招.
'**作 者 石陆
'**制作日期 2007 / 12 / 6
'**修 改
'**修改日期
'**石陆软件屋 http://www.cnng.net
'***********************************************************
Option Explicit
Public Enum FO_Operation
FO_MOVE = 1
FO_COPY = 2
FO_DELETE = 3
FO_RENAME = 4
End Enum
Public Enum FOFlags
FOF_MULTIDESTFILES = &H1 'Destination specifies multiple files
FOF_SILENT = &H4 '不显示进度对话框
FOF_RENAMEONCOLLISION = &H8 'Rename if destination already exists
FOF_NOCONFIRMATION = &H10 '不提醒用户
FOF_WANTMAPPINGHANDLE = &H20 'Fill in hNameMappings member
FOF_ALLOWUNDO = &H40 '如果可能在撤销之前保存信息
FOF_FILESONLY = &H80 'On *.*, 不复制文件夹
FOF_SIMPLEPROGRESS = &H100 '任何文件都不显示名字
FOF_NOCONFIRMMKDIR = &H200 '创建文件不要求确认
End Enum
Public 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 Long ' only used if FOF_SIMPLEPROGRESS
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private op As SHFILEOPSTRUCT
Public Sub DeleteFolder(sDeleteFolder As String, Optional Interface As Boolean = False)
SetAttr sDeleteFolder, vbNormal
With op
.wFunc = FO_DELETE
.pFrom = sDeleteFolder
.fFlags = IIf(Interface = False, FOF_NOCONFIRMATION, FOF_NOCONFIRMATION And FOF_SILENT)
End With
SHFileOperation op
End Sub
相关链接:vb | 删除 | 目录 | 文件夹
[本日志由 admin 于 2013-11-01 10:57 PM 编辑]
引用通告地址 (0):
http://www.cnng.net/blog/trackback.asp?tbID=54
http://www.cnng.net/blog/trackback.asp?tbID=54&CP=GBK
http://www.cnng.net/blog/trackback.asp?tbID=54
http://www.cnng.net/blog/trackback.asp?tbID=54&CP=GBK