Pergunta

Eu queria saber se alguém poderia me ajudar com uma função vb6 que apagar todos os arquivos dentro de um diretório (excluindo subdiretórios).

Foi útil?

Solução

Uma linha, usando a instrução VB6 matança

Kill "c:\doomed_dir\*.*"

O tópico de ajuda diz "Em Microsoft janelas, Mate suporta o uso de vários caracteres (*) e de um único caractere (?) curingas para especificar vários arquivos".

Como um aparte - Eu prefiro evitar o Microsoft Scripting Runtime (incluindo FileSystemObject). Na minha experiência, é ocasionalmente quebrado em máquinas de usuários, talvez porque o seu departamento de TI é paranóico sobre vírus.

Outras dicas

Eu acredito que isso deve funcionar:

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

Eu não testei todos os cenários, mas ele deve funcionar. Ele deve excluir todos os arquivos e se o arquivo está bloqueado ou você não tem acesso você deve obter Erro 70, que está preso e você terá uma Abortar, Repetir ou Ignorar caixa.

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

Parece que o tempo de execução de scripts método DeleteFile do FileSystemObject também suporta wildcards como isso funciona para mim:

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

Esta abordagem tem menos controle do que a abordagem sugerida pela @Corazu, mas pode ter alguma utilidade em certos casos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top