作者:BlackFeather
欢迎使用本代码!不用管版权!
直接删除文件夹的函数只能删除空文件夹,所以删除非空文件夹的时候要写一个递归算法遍历目录,使用Findfirstfile和Findnextfile函数写了一个Function,测试很好!但是又想到一个问题,都知道传说中的autorun.inf病毒的免疫补丁是建立一个autorun.inf的只读文件夹,然后里面再用命令行md建立目录名带“.”的文件夹达到非法文件夹以防止被删除的目的,使用rd命令可以删除。后来经测试,RemoveDirectoryA函数是可以删除这种文件夹的,就是文件夹名 + .\ 就可以。后来就加了一行代码就可以删除名称带“.”的文件夹的功能。
代码如下:
Public Function DelDir(ByVal DTarget As String) As Boolean
Dim D_WFD As WIN32_FIND_DATA
Dim hW As Long
Dim TempFPath As String
Dim TempFName As String
Dim DelFLst As New Collection
Dim DelDLst As New Collection
If Right(DTarget, 1) <> "\" Then
TempFPath = DTarget & "\"
Else
TempFPath = DTarget
End If
hW = FindFirstFile(TempFPath & "*.*", D_WFD)
If hW = INVALID_HANDLE_VALUE Then DelDir = False: Exit Function
Do
TempFName = Left(D_WFD.cFileName, InStr(D_WFD.cFileName, vbNullChar) - 1)
If (D_WFD.dwFileAttributes And vbDirectory) Then
If TempFName <> "." And TempFName <> ".." Then
If Right(TempFName, 1) = "." Then TempFName = TempFName & ".\"
DelDir TempFPath & TempFName
End If
Else
SetFileAttributes TempFPath & TempFName, FILE_ATTRIBUTE_ARCHIVE
If DeleteFileA(TempFPath & TempFName) = 0 Then DelDir = False: Exit Function
End If
DoEvents
Loop While FindNextFile(hW, D_WFD)
FindClose hW
SetFileAttributes DTarget, FILE_ATTRIBUTE_ARCHIVE
If RemoveDir(DTarget) = 0 Then DelDir = False: Exit Function
DelDir = True
End Function
调用方法:
DelDir 要删除的文件夹名 比如DelDir "c:\autorun.inf",但是要保证输入的路径是文件夹而不是文件!
返回true成功,如果文件夹中有正在被使用的东西存在则返回失败false
一般的都没有这个多余的功能,我就加上了,纯粹无聊···