문제

디렉토리 내의 모든 파일을 삭제하는 VB6 함수 (하위 디렉터 제외)를 삭제하는 VB6 기능을 도와 줄 수 있는지 궁금합니다.

도움이 되었습니까?

해결책

VB6 문을 사용하여 한 줄 죽이다

Kill "c:\doomed_dir\*.*"

그만큼 도움말 주제는 말합니다 "Microsoft Windows에서 Kill은 다중 문자 (*) 및 단일 문자 (?) 와일드 카드의 사용을 지원하여 여러 파일을 지정합니다."

따로 - 나는 Microsoft 스크립팅 런타임 (FileSystemObject 포함)을 피하는 것을 선호합니다. 내 경험상 그것은 가끔 사용자 컴퓨터에서 깨지기 때문에 IT 부서는 바이러스에 대한 편집증이기 때문일 것입니다.

다른 팁

나는 이것이 효과가 있다고 생각한다 :

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

모든 시나리오를 테스트하지는 않았지만 작동해야합니다. 모든 파일을 삭제해야하며 파일이 잠겨 있거나 액세스 할 수없는 경우 잡힌 오류 70을 가져 와서 중단, 재 시도 또는 무시해야합니다.

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

스크립팅 런타임 FileSystemObject의 DeleteFile 메소드도 와일드 카드를 지원하는 것 같습니다.

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

이 접근법은 @corazu가 제안한 접근법보다 제어력이 적지 만 특정한 경우에는 약간의 유용성이있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top