a developer's notes – a semi-technical web development BLOG

January 24, 2012

How to find the longest directory path in a directory with c# with recursion

Filed under: C# — Duy Nguyen @ 8:36 am
Tags: , , , , , , , , , ,
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace DirectoryCounter
{
    class Program
    {
        public static int highestCount = 0;
        public static int numOfDir = 0;

        public static string dirName = "";
        public static string nameOfHighestDir = "";

        static void Main(string[] args)
        {
            //Hard coded directory to searched
            string dirToSearch = @"C:\test";

            DirectoryInfo dirInfo = new DirectoryInfo(dirToSearch);

            //number of directories that we are passing in
            int dirToSearchPathLength = TextTool.CountStringOccurrences(dirToSearch, "\\"); 

            GetHighestNumberOfSubDirectories(dirInfo);

            Console.WriteLine("Highest Number of directories:" + (highestCount - dirToSearchPathLength));
            Console.WriteLine("Name of directory:" + nameOfHighestDir);
        }

        private static void GetHighestNumberOfSubDirectories(DirectoryInfo dInfo)
        {
            DirectoryInfo[] subDirectories;
            
            subDirectories = dInfo.GetDirectories();

            if (subDirectories.Length > 0)
            {
                foreach (var directoryInfo in subDirectories)
                {
                    dirName = directoryInfo.FullName;

                    numOfDir = TextTool.CountStringOccurrences(dirName, "\\");  

                    //recursive call
                    GetHighestNumberOfSubDirectories(directoryInfo);
                }

                if (numOfDir >= highestCount)
                {
                    highestCount = numOfDir;
                    nameOfHighestDir = dirName;
                    numOfDir = 0;
                }
            }
        }


        /// <summary>
        /// Contains static text methods.
        /// </summary>
        public static class TextTool
        {
            /// <summary>
            /// Count occurrences of strings.
            /// </summary>
            public static int CountStringOccurrences(string text, string pattern)
            {
                // Loop through all instances of the string 'text'.
                int count = 0;
                int i = 0;
                while ((i = text.IndexOf(pattern, i)) != -1)
                {
                    i += pattern.Length;
                    count++;
                }
                return count;
            }
        }

       
    }
}

Advertisements

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: