I am back from the Windows Professional Conference (Milan, Italy), for which I also server as the chairman for two of the four tracks. The conference touched virtually all the new features of Visual Studio and SQL Server 2005, plus tons of other topics. But that's another story.
When preparing the material for the conference I had to pack all my code samples in a zip file. Even after zipping them, I came up with a 7-8M file, which is a bit too much. So I was about to manually delete all the files that could be recreated by recompiling the projects. It's the same old story, that repeat itself with all conferences, books, articles for magazines and blog posts.
Instead of using the manual approach, this time I decided to write a tiny utility that does the work for me. It took (literally) two minutes to write a console utility that takes the path as an argument and recurses over that directory tree to remove all the folders named "bin" and "obj". If a delete operation fails, a message error is displayed. (This happens when an executable is running and is therefore locked by the operating system.) The code is especially concise thanks to an overload of the Directory.GetDirectories method (added in .NET 2.0) that returns all the directory in a tree.
Imports System.IO
Module
Module1
Sub Main(ByVal args() As String)
' Use current directory if no argument has been specified
Dim rootDir As String = Directory.GetCurrentDirectory()
If args.Length > 0 Then rootDir = args(0)
' Read all the folder names in the specified directory tree
Dim dirNames() As String = Directory.GetDirectories(rootDir, "*.*", SearchOption.AllDirectories)
Dim errors As Integer = 0
' Delete all the BIN and OBJ subdirectories
For Each dir As String In dirNames
Dim dirName As String = Path.GetFileName(dir).ToLower()
If dirName = "bin" OrElse dirName = "obj" Then
Try
Console.Write("Deleting {0} ...", dir)
Directory.Delete(dir, True)
Console.WriteLine("DONE")
Catch ex As Exception
Console.WriteLine()
Console.WriteLine(" ERROR: {0}", ex.Message)
errors += 1
End Try
End If
Next
Console.WriteLine()
If errors = 0 Then
Console.WriteLine("All directories were removed successfully")
Else
Console.WriteLine("{0} directories couldn't be removed")
End If
End Sub
End Module
In addition to using this tool from the command line, you can add it to the Tools menu, so that you can quickly delete all the files produced by compiling the current solution, by using this command:
DELETEBINPATH $(SolutionDir)
where of course DeleteBinPath is the name you used when compiling the utility.
UPDATE: I have posted a new version of this utility in a more recent post.