Je me demandais si quelqu'un pouvait m'aider avec une fonction vb6 qui supprimerait tous les fichiers dans un répertoire (à l'exclusion des sous-répertoires).Supprimer tous les fichiers dans un répertoire vb6
Répondre
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.
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
Je reçois une erreur "Type défini par l'utilisateur non défini" dans "Dim oFs comme nouveau FileSystemObject" – zSynopsis
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
"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
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
+1 de sympathie car je ne pense pas que cela méritait -1. Bien que "Kill" & pathname & "\ *. *" Soit nettement plus court. – MarkJ
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.
J'ai toujours l'air de trop compliquer les choses .. J'aurais dû m'en souvenir. – Corazu
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