2014-01-23 1 views
2

임시 폴더에있는 파일을 삭제하는 프로그램을 만들지 않았습니다. 지금까지 파일을 삭제하는 코드를 가져 왔지만 사용중인 파일을 건너 뛰거나 예외를 catch하여 파일을 삭제하려고 할 때 내 프로그램이 중단되지 않도록하는 방법을 찾지 못하는 것 같습니다. 용도. 여기 사용중인 파일을 삭제하려고 할 때 예외를 잡는 방법?

내가 지금까지 가지고있는 코드 :

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
     If CheckBox1.Checked = True Then 
      Dim s As String 
      For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
       System.IO.File.Delete(s) 
      Next s 
     End If 
end sub 
+5

['Path.GetTempPath'] (http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath (v = vs.110) .aspx)는 친구입니다. 사용자의 프로필 디렉토리가 사용자 이름과 정확히 같은 형식을 가지고 있다는 것을 100 % 보증하지 않으며,'C : \ Users'가 profiles 디렉토리에 대한 올바른 루트 경로가 아니라는 보장도 없습니다. –

답변

3

오류 (예외)를 잡기 위해 try/catch 블록을 사용하여 프로그램이 오류를 무시하고 계속 할 수

 
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
    If CheckBox1.Checked = True Then 
     Dim s As String 
     For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
      Try 
       System.IO.File.Delete(s) 
      Catch ex As Exception 
       Console.WriteLine("File could not be deleted : {0}", ex.Message) 
      End Try 
     Next s 
    End If 
end sub 

다음 항목을 처리합니다.

+1

'On Error Resume Next'에 대한 사랑이 없습니까? : ^) – helrich

+0

멋지게 일한 나는 똑같은 일을 시도했지만 "Next s"를 시도했는데 아마 그랬을거야 – Jkrules

+2

전혀 좋아하지 않는다. 그 일은 결코 존재해서는 안된다. :) – mbarthelemy

1

예외가 throw되면 Catch에 의해 처리되면 실행이 End Try으로 점프합니다. 따라서 Try/Catch 블록의 시작과 끝을 넣는 블록이 중요합니다. 예를 들어 : Delete에 대한 호출이 실패 할 경우 위의 예에서

Try 
    Dim s As String 
    For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
     System.IO.File.Delete(s) 
    Next s 
Catch ex As IOException 
End Try 

, 그것은 End Try로 이동하고 For 루프 (하여 파일의 나머지 부분을 건너 뛰는)의 반복의 나머지 부분을 건너 뜁니다. 그러나이 사항을 고려하십시오

Dim s As String 
For Each s In System.IO.Directory.GetFiles("C:\Users\" + System.Environment.UserName + "\AppData\Local\Temp") 
    Try 
     System.IO.File.Delete(s) 
    Catch ex As IOException 
    End Try 
Next s 

을 두 번째 예에서, 그것은 End Try으로 이동합니다 다음 For 루프 (따라서 목록에있는 다음 파일에 계속)의 다음 반복을 계속합니다.

위의 설명에서 언급했듯이 Path.GetTempPath을 사용해야 임시 폴더의 경로를 가져올 수 있습니다. 변경 될 수 있으므로 직접 경로를 구성하면 안됩니다. 예를 들어 Windows에서는 사용자 폴더가 C:\Users이어야합니다. 당신은 실제로 그것을 바꿀 수 있습니다.

+0

이런 예외를 먹는 습관이 좋지 않습니다. – Neolisk

+1

@Neolisk 네, 그렇습니다. 나는 예제를 단순하게 유지하려고 노력했지만, 당신이 옳다는 것을 말하면 안됩니다. 나는 나의 대답을 업데이트했다. 다시 한 번 감사드립니다! –

관련 문제