加强版的删除文件夹的Function

VB编程 blackfeather

 

作者: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  

 

一般的都没有这个多余的功能,我就加上了,纯粹无聊···

 

评论列表:

发表评论: