用 DeleteFile Api,可删除文件,如果正在使用,也可删除.
'This program needs a Dialog box, named CDBox1
'  (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
'   and select Microsoft Common Dialog control)
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const FO_DELETE = &H3
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As Long) As Long
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    Dim lngHandle As Long, SHDirOp As SHFILEOPSTRUCT, lngLong As Long
    Dim Ft1 As FILETIME, Ft2 As FILETIME, SysTime As SYSTEMTIME
    'Set the dialog's title
    CDBox.DialogTitle = "Choose a file ..."
    'Raise an error when the user pressed cancel
    CDBox.CancelError = True
    'Show the 'Open File'-dialog
    CDBox.ShowOpen
    'Create a new directory
    CreateDirectory "C:\KPD-Team", ByVal &H0
    'Copy the selected file to our new directory
    CopyFile CDBox.filename, "C:\KPD-Team\" + CDBox.FileTitle, 0
    'Rename the file
    MoveFile "C:\KPD-Team\" + CDBox.FileTitle, "C:\KPD-Team\test.kpd"
    'Open the file
    lngHandle = CreateFile("C:\KPD-Team\test.kpd", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
    'Get the file's size
    MsgBox "The size of the selected file is" + Str$(GetFileSize(lngHandle, lngLong)) + " bytes."
    'Get the fil's time
    GetFileTime lngHandle, Ft1, Ft1, Ft2
    'Convert the file time to the local file time
    FileTimeToLocalFileTime Ft2, Ft1
    'Convert the file time to system file time
    FileTimeToSystemTime Ft1, SysTime
    MsgBox "The selected file was created on" + Str$(SysTime.wMonth) + "/" + LTrim(Str$(SysTime.wDay)) + "/" + LTrim(Str$(SysTime.wYear))
    'Close the file
    CloseHandle lngHandle
    'Delete the file
    DeleteFile "C:\KPD-Team\test.kpd"
    With SHDirOp
        .wFunc = FO_DELETE
        .pFrom = "C:\KPD-Team"
    End With
    'Delete the directory
    SHFileOperation SHDirOp
    End
End Sub

解决方案 »

  1.   


        采用递归算法删除带有多级子目录的目录
     
     Option ExplicitPrivate Sub Command1_Click()
    Dim strPathName As String
    strPathName = ""
    strPathName = InputBox("请输入需要删除的文件夹名称∶", "删除文件夹")
    If strPathName = "" Then Exit SubOn Error GoTo ErrorHandle
    SetAttr strPathName, vbNormal '此行主要是为了检查文件夹名称的有效性
    RecurseTree strPathName
    Label1.Caption = "文件夹" & strPathName & "已经删除!"
    Exit Sub
    ErrorHandle:
    MsgBox "无效的文件夹名称:" & strPathName
    End SubSub RecurseTree(CurrPath As String)
    Dim sFileName As String
    Dim newPath As String
    Dim sPath As String
    Static oldPath As StringsPath = CurrPath & "\"sFileName = Dir(sPath, 31) '31的含义∶31=vbNormal+vbReadOnly+vbHidden+vbSystem+vbVolume+vbDirectory
    Do While sFileName <> ""
    If sFileName <> "." And sFileName <> ".." Then
    If GetAttr(sPath & sFileName) And vbDirectory Then '如果是目录和文件夹
    newPath = sPath & sFileName
    RecurseTree newPath
    sFileName = Dir(sPath, 31)
    Else
    SetAttr sPath & sFileName, vbNormal
    Kill (sPath & sFileName)
    Label1.Caption = sPath & sFileName '显示删除过程
    sFileName = Dir
    End If
    Else
    sFileName = Dir
    End If
    DoEvents
    Loop
    SetAttr CurrPath, vbNormal
    RmDir CurrPath
    Label1.Caption = CurrPath
    End Sub
     
       
     
      
     
      

  2.   

    可以直接用吗?
    我上次用的也是这个API啊,怎么我没有成功呢 ?
      

  3.   


        如何用程序来Delete Copy Move Rename File/Directory
     
    作者: 王国荣 Private 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 String '  only used if FOF_SIMPLEPROGRESS
    End Type
    'wFunc 的设定值
    'FO_COPY     Copies the files specified by pFrom to the location specified by pTo.
    'FO_DELETE   Deletes the files specified by pFrom (pTo is ignored).
    'FO_MOVE     Moves the files specified by pFrom to the location specified by pTo.
    'FO_RENAME   Renames the files specified by pFrom.'fFlag的设定
    'FOF_ALLOWUNDO           Preserves undo information, if possible.
    'FOF_FILESONLY           Performs the operation only on files if a wildcard filename
    '                        (*.*) is specified.
    'FOF_MULTIDESTFILES      Indicates that the pTo member specifies multiple destination
    '                        files (one for each source file) rather than one directory where
    '                        all source files are to be deposited.
    'FOF_NOCONFIRMATION      Responds with "yes to all" for any dialog box that is displayed.
    'FOF_NOCONFIRMMKDIR      Does not confirm the creation of a new directory if
    '                        the operation requires one to be created.
    'FOF_RENAMEONCOLLISION   Gives the file being operated on a new name (such as
    '                        "Copy #1 of...") in a move, copy, or rename operation
    '                        if a file of the target name already exists.
    'FOF_SILENT              Does not display a progress dialog box.
    'FOF_SIMPLEPROGRESS      Displays a progress dialog box, but does not show the
    '                        filenames.
    'FOF_WANTMAPPINGHANDLE   Fills in the hNameMappings member. The handle must be
    '                        freed by using the SHFreeNameMappings function.Const FO_MOVE = &H1
    Const FO_COPY = &H2
    Const FO_DELETE = &H3
    Const FOF_NOCONFIRMATION = &H10
    Const FOF_NOCONFIRMMKDIR = &H200
    Const FOF_ALLOWUNDO = &H40
    Const FOF_SILENT = &H4
    Private Declare Function SHFileOperation Lib "shell32.dll" Alias _
                    "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long'删除 test目录及其底下的子目录到资源回收桶
    Private Sub Command1_Click()
        Dim SHFileOp As SHFILEOPSTRUCT    SHFileOp.wFunc = FO_DELETE
        SHFileOp.pFrom = "c:\test" + Chr(0)
        '不出现档案删除的动态AVI,且不Confirm
        SHFileOp.fFlags = FOF_SILENT + FOF_ALLOWUNDO + FOF_NOCONFIRMATION
        '若没有 FOF_ALLOWUNDO 则不会到资源回收桶
        Call SHFileOperation(SHFileOp)
    End Sub'同时删除多档到资源回收桶
    Private Sub Command2_Click()
        Dim SHFileOp As SHFILEOPSTRUCT
        Dim Files As String
        'Files = "c:\test.txt" + Chr(0)
        Files = "c:\test1.txt" + Chr(0) + "c:\test2.txt" + Chr(0) + _
                "c:\test3.txt" + Chr(0)
        SHFileOp.wFunc = FO_DELETE
        SHFileOp.pFrom = Files
        '删至资源回收桶,且不Confirm
        SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
        Call SHFileOperation(SHFileOp)
    End Sub'将 c:\temp 整个目录复制到 c:\temp2
    Private Sub Command3_Click()
        Dim SHFileOp As SHFILEOPSTRUCT    SHFileOp.wFunc = FO_COPY
        SHFileOp.pFrom = "c:\temp\*.*"
        SHFileOp.pTo = "c:\temp2\*.*"
        SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR
        Call SHFileOperation(SHFileOp)
    End Sub'将 c:\test4.txt 快速移到 c:\temp 目录
    Private Sub Command4_Click()
        Dim SHFileOp As SHFILEOPSTRUCT    SHFileOp.wFunc = FO_MOVE
        SHFileOp.pFrom = "c:\test4.txt" + Chr(0)
        SHFileOp.pTo = "c:\temp"
        SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
        Call SHFileOperation(SHFileOp)
    End Sub 
       
     
      
     
      

  4.   

    如果是那些KILL和DeleteFile 都删除不了文件还存在就无法删除目录
      

  5.   

    麻烦各位高手先在win98下试试看您能否把history目录删除
    如果可以,请将您的方法告诉我,多谢。
    如果不行,请和我一起等待其他人的回答。
      

  6.   

    ok
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    !