2009-09-23 8 views

Répondre

7

Une ligne, en utilisant l'instruction VB6 Kill

Kill "c:\doomed_dir\*.*" 

Le help topic says « Dans Microsoft Windows, kills prend en charge l'utilisation de plusieurs caractères (*) et un seul caractère wildcards (?) Pour spécifier plusieurs fichiers ". En aparté - je préfère éviter le Microsoft Scripting Runtime (y compris FileSystemObject). Dans mon expérience, il est parfois cassé sur les machines des utilisateurs, peut-être parce que leur département informatique est paranoïaque sur les virus.

+0

J'ai toujours l'air de trop compliquer les choses .. J'aurais dû m'en souvenir. – Corazu

+1

Dans Access 2000, l'utilisation du caractère générique '' *. * "' Avec la commande Kill échouera si un seul fichier de ce répertoire est verrouillé (ou ouvert). – Spidermain50

4

Je crois que cela devrait fonctionner:

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

Je reçois une erreur "Type défini par l'utilisateur non défini" dans "Dim oFs comme nouveau FileSystemObject" – zSynopsis

+0

C'est parce que vous devrez ajouter la référence à FileSystemObject pour l'utiliser .. Je ne me souviens pas de quoi le nom de référence exact est bien. – Corazu

+0

"Pour utiliser FileSystemObject, vous devez sélectionner le Microsoft Scripting Runtime dans la boîte de dialogue Références du projet pour votre projet." D'après: http://support.microsoft.com/kb/186118 – Alex

2

Je ne l'ai pas testé tous les scénarios, mais il devrait fonctionner. Il devrait supprimer chaque fichier et si le fichier est verrouillé ou que vous n'avez pas accès, vous devriez obtenir Erreur 70 qui est interceptée et vous obtenez une boîte Abort, Retry ou 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 de sympathie car je ne pense pas que cela méritait -1. Bien que "Kill" & pathname & "\ *. *" Soit nettement plus court. – MarkJ

1

Il semblerait que le moteur d'exécution de script méthode DeleteFile de FileSystemObject prend également en charge les caractères génériques que cela fonctionne pour moi:

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

Cette approche a moins de contrôle que l'approche proposée par @Corazu, mais peut avoir une certaine utilité dans certains cas.

Questions connexes