I recently came across a problem with My.Computer.FileSystem.DeleteDirectory(). It will not delete read only files.
I found out by Googling that I could delete the read only files by changing the file attributes to ‘Normal’. So I wrote a recursive function, as below.
Private Sub DeleteDir(ByVal dir As DirectoryInfo)
For Each d In dir.GetDirectories
DeleteDir(d)
Next
For Each f In dir.GetFiles
Try
f.Attributes = FileAttributes.Normal
f.Delete()
Catch ex As Exception
Log(ex.Message)
End Try
Next
dir.Delete(True)
End Sub
It seems to work fine, but it would be nice if My.Computer.FileSystem.DeleteDirectory() had another parameter to delete read only files, or there was an easier way to do this.
My understanding is that the classes in the
Mynamespace are partly meant as a crutch to new developers (possibly with a VB6 background) that finds the .Net framework a bit overwhelming. If they made theMynamespace too big, I think it would defeat that purpose of being easier to find things in. I would also assume that they probably had limited resources to build that namespace and had to be quite selective.The solution is for you to do as you’ve done and write your own method, which you could then put in a class library or similar together with other helpful helper functions that you can then easily include in all your projects.
Btw, remember that
dir.Delete(True)can throw exceptions as well.