how to extract common file path from list of file paths in c#

后端 未结 9 1532
粉色の甜心
粉色の甜心 2021-01-17 15:42

What is the best way extract the common file path from the list of file path strings in c#?

Eg: I have a list 5 file paths in List variable, like below

c:\

9条回答
  •  情深已故
    2021-01-17 16:28

    Because everything is best solved with LINQ*:
    *not everything is best solved with LINQ.

    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    
    class Program
    {
        static void Main(string[] args)
        {
            List Files = new List()
            {
                @"c:\abc\pqr\tmp\sample\b.txt",
                @"c:\abc\pqr\tmp\new2\c1.txt",
                @"c:\abc\pqr\tmp\b2.txt",
                @"c:\abc\pqr\tmp\b3.txt",
                @"c:\a.txt"
            };
    
            var MatchingChars =
                from len in Enumerable.Range(0, Files.Min(s => s.Length)).Reverse()
                let possibleMatch = Files.First().Substring(0, len)
                where Files.All(f => f.StartsWith(possibleMatch))
                select possibleMatch;
    
            var LongestDir = Path.GetDirectoryName(MatchingChars.First());
        }
    }
    

    Explanation:

    The first line gets a list of lengths of possible matches to evaluate. We want the longest possibility first (so i reverse the enumeration which would be 0, 1, 2, 3; turning it into 3, 2, 1, 0).

    I then get the string to match, which is simply a substring of the first entry of the given length.

    I then filter the results, to ensure we only include possible matches that all files start with.

    Finally, i return the first result, which will be the longest substring and call path.getdirectoryname to ensure if something has a few identical letters in the filenames it isn't included.

提交回复
热议问题