File Stream C#

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
//  Dirs.cs -- Uses the DirectoryInfo class to recursively show
//             subdirectories.
//
//             Compile this program with the following command line:
//                 C:>csc Dirs.cs
using System;
using System.IO;
namespace nsStreams
{
    public class Dirs
    {
        static public void Main (string [] args)
        {
            string StartDir = "";
// Build the directory name from any arguments
            if (args.Length > 0)
            {
                foreach (string str in args)
                {
                    StartDir += str;
                    StartDir += " ";
                }
// Strip any trailing spaces from the directory name
                char [] trim = new char[1] {' '};
                StartDir.TrimEnd (trim);
            }
            else
            {
                StartDir = ".";
            }
            DirectoryInfo d;
            try
            {
                d = new DirectoryInfo (StartDir);
            }
            catch (DirectoryNotFoundException)
            {
                 Console.WriteLine ("Cannot open directory " + StartDir);
                 return;
            }
            DirectoryInfo [] dirs;
            try
            {
                dirs = d.GetDirectories ();
            }
            catch (UnauthorizedAccessException)
            {
                Console.WriteLine ("Not authorized to access " + StartDir);
                return;
            }
            catch (DirectoryNotFoundException)
            {
                 Console.WriteLine ("Cannot open directory " + StartDir);
                 return;
            }
            foreach (DirectoryInfo dir in dirs)
            {
                try
                {
                    ShowDirectories (dir, 0);
                }
                catch (UnauthorizedAccessException)
                {
                    continue;
                }
            }
        }
        static public void ShowDirectories (DirectoryInfo d, int level)
        {
            int spaces = level;
            while (spaces-- >= 0)
                Console.Write (" ");
            Console.WriteLine (d);
            DirectoryInfo [] dirs = d.GetDirectories ();
            if (dirs.Length > 0)
            {
                foreach (DirectoryInfo dir in dirs)
                {
                    try
                    {
                        ShowDirectories (dir, level + 2);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        continue;
                    }
                }
            }
        }
    }
}