2009-09-23 2 views

ответ

7

Одна линия, используя VB6 заявление Kill

Kill "c:\doomed_dir\*.*" 

help topic says «В Microsoft Windows, убийство поддерживает использование нескольких знаков (*) и одного-символа (?) Подстановочные указать несколько файлов ".

В стороне - я предпочитаю избегать выполнения сценариев Microsoft Scripting Runtime (включая FileSystemObject). По моему опыту, это иногда прерывается на пользовательских машинах, возможно, потому, что их ИТ-отдел параноидален в отношении вирусов.

+0

Мне всегда кажется, что это сложно. Мне следовало вспомнить об этом. – Corazu

+1

В Access 2000 использование шаблона '* *. *" 'С командой Kill не удастся, если даже один файл в этом каталоге заблокирован (или открыт). – Spidermain50

4

Я считаю, что это должно работать:

Dim oFs As New FileSystemObject 
Dim oFolder As Folder 
Dim oFile As File 

If oFs.FolderExists(FolderSpec) Then 
    Set oFolder = oFs.GetFolder(FolderSpec) 

    'caution! 
    On Error Resume Next 

    For Each oFile In oFolder.Files 
     oFile.Delete True 'setting force to true will delete a read-only file 
    Next 

    DeleteAllFiles = oFolder.Files.Count = 0 
End If 

End Function 
+0

Я получаю сообщение об ошибке «User-Defined Type not defined» на «Dim oFs As New FileSystemObject» – zSynopsis

+0

Это потому, что вам нужно добавить ссылку на FileSystemObject, чтобы использовать его. Я не помню, что однако точное имя ссылки. – Corazu

+0

«Чтобы использовать FileSystemObject, вы должны выбрать время выполнения сценариев Microsoft в диалоговом окне« Ссылки на проекты »для своего проекта». В соответствии с: http://support.microsoft.com/kb/186118 – Alex

2

Я не проверял каждый сценарий, но он должен работать. Он должен удалять каждый файл, и если файл заблокирован или у вас нет доступа, вы должны получить Error 70, который пойман, и вы получите поле Abort, Retry или Ignore.

Sub DeleteAllFilesInDir(ByVal pathName As String) 
    On Error GoTo errorHandler 
    Dim fileName As String 
    If Len(pathName) > 0 Then 
    If Right(pathName, 1) <> "\" Then pathName = pathName & "\" 
    End If 
    fileName = Dir(pathName & "*") 

    While Len(fileName) > 0 
    Kill pathName & fileName 
    fileName = Dir() 
    Wend 

    Exit Sub 
errorHandler: 
    If Err.Number = 70 Then 
    Select Case MsgBox("Could not delete " & fileName & ". Permission denied. File may be open by another user or otherwise locked.", vbAbortRetryIgnore, "Unable to Delete File") 
     Case vbAbort: 
     Exit Sub 
     Case vbIgnore: 
     Resume Next 
     Case vbRetry: 
     Resume 
    End Select 
    Else 
    MsgBox "Error deleting file " & fileName & ".", vbOKOnly Or vbCritical, "Error Deleting File" 
    End If 
End Sub 
+0

+1 в симпатии, потому что я не думаю, что это заслуживает -1. Хотя «Kill» & pathname & «\ *. *» Определенно короче. – MarkJ

1

Казалось бы, что время выполнения сценариев метод DeleteFile FileSystemObject также поддерживает групповые символы, как это работает для меня:

Dim fs As New Scripting.FileSystemObject 
fs.Deletefile "C:\Temp\*.jpg", true 

Этот подход имеет меньший контроль, чем подход, предложенный @Corazu, но может иметь некоторую полезность в определенных случаев.

Смежные вопросы