Mega Code Archive

 
Categories / C# / File Stream
 

Gets the common root path of the given path list

using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace StyleCopContrib.Runner {   /// <summary>   /// A path utility class.   /// </summary>   public static class PathUtility   {     #region Methods     /// <summary>     /// Gets the common root path of the given path list.     /// </summary>     /// <param name="paths">The list of path.</param>     /// <returns>The common root path.</returns>     public static string GetCommonRootPath(IEnumerable<string> paths)     {       string[] commonPathParts = null;       int commonPartIndex = int.MaxValue;       foreach (string path in paths)       {         if (!Path.IsPathRooted(path))         {           throw new InvalidOperationException("Only fully qualified path are supported");         }         string[] pathParts = path.Split(Path.DirectorySeparatorChar);         if (commonPathParts == null)         {           commonPathParts = pathParts;           commonPartIndex = commonPathParts.Length;         }         else         {           int partIndex = 0;           while (partIndex < pathParts.Length && partIndex < commonPathParts.Length)           {             if (commonPathParts[partIndex].ToUpperInvariant() != pathParts[partIndex].ToUpperInvariant()) break;             partIndex++;           }           commonPartIndex = Math.Min(commonPartIndex, partIndex);         }       }       string commonPath;       if (commonPartIndex == 0)       {         commonPath = string.Empty;       }       else if (commonPartIndex == 1)       {         commonPath = string.Concat(commonPathParts[0], Path.DirectorySeparatorChar);       }       else       {         commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonPathParts, 0, commonPartIndex);       }       return commonPath;     }     #endregion   } }