Directory.Delete() Test: program.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;

namespace DirectoryTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Creating test directory");
                CreateTestDirectory();
            }
            catch (Exception ex)
            {
                DisplayError(ex);
                WaitForKey();
                return;
            }

            Console.WriteLine("Directory created");
            WaitForKey();

            DeleteTestDirectory();

            //SafeDeleteTestDirectory();
            
            Console.WriteLine("Directory deleted");
            WaitForKey();
        }

        static void DeleteTestDirectory()
        {
            try
            {
                Console.WriteLine("Deleting test directory");
                Directory.Delete("c:\\Temp\\Test1", true);
            }
            catch (Exception ex)
            {
                DisplayError(ex);
                WaitForKey();
                return;
            }
        }

        static void SafeDeleteTestDirectory()
        {
            try
            {
                Console.WriteLine("Deleting test directory with retry");
                Directory.Delete("c:\\Temp\\Test1", true);
            }
            catch (Exception ex)
            {
                DisplayError(ex);
                Thread.Sleep(1000);
                Console.WriteLine("Failed! Trying again...");
                try
                {
                    Directory.Delete("c:\\Temp\\Test1", true);
                }
                catch (Exception ex2)
                {
                    DisplayError(ex2);
                    WaitForKey();
                    return;
                }
            }
        }
        
        static char WaitForKey()
        {
            Console.WriteLine("Press any key...");
            ConsoleKeyInfo cki = Console.ReadKey();
            return cki.KeyChar;
        }

        
        static void CreateTestDirectory()
        {
            Directory.CreateDirectory("c:\\Temp\\Test1");
            Directory.CreateDirectory("c:\\Temp\\Test1\\Test2");

            using (StreamWriter sw = new StreamWriter("c:\\Temp\\Test1\\TestFile1.txt", false))
            {
                sw.WriteLine("This is a line of text");
                sw.Close();
            }

            using (StreamWriter sw = new StreamWriter("c:\\Temp\\Test1\\Test2\\TestFile2.txt", false))
            {
                sw.WriteLine("This is a line of text");
                sw.Close();
            }
        }

        static void DisplayError(Exception ex)
        {
            Exception current = ex;
            while (null != current)
            {
                Console.WriteLine("Error: " + ex.Message);
                Console.WriteLine("Stack: " + ex.StackTrace);
                Console.WriteLine(Environment.NewLine);
                current = current.InnerException;       
            }
        }
    }
}