Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Why don't use just something like this (without recursion) ?</p> <pre><code>public static IEnumerable&lt;string&gt; GetMachingFiles(string pathA, string pathB) { var matchingFiles = new HashSet&lt;string&gt;(); var allAfiles = Directory.GetFiles(pathA, "*", SearchOption.AllDirectories); foreach (var file in allAfiles) { foreach (var mathcFile in Directory.GetFiles(pathB, Path.GetFileName(file), SearchOption.AllDirectories)) matchingFiles.Add(mathcFile); } return matchingFiles; } </code></pre> <p>Of course this solution suffers a performance decay in case of many files, because <code>Directory.GetFiles</code> navigates all files even when you pass a restrictive pattern. To be more faster you could use LINQ as pointed out in <a href="https://stackoverflow.com/questions/4374887/how-to-compare-two-folders-for-similar-files-based-on-name-in-c/4375203#4375203">Brian Rasmussen's answer</a></p> <p><strong>EDIT:</strong><br> a faster example using LINQ (.NET 3.5):</p> <pre><code>public static IEnumerable&lt;string&gt; GetMachingFilesFast(string pathA, string pathB) { DirectoryInfo dirA = new DirectoryInfo(pathA); DirectoryInfo dirB = new DirectoryInfo(pathB); var filesA = dirA.GetFiles("*",SearchOption.AllDirectories); var filesB = dirB.GetFiles("*", SearchOption.AllDirectories); var matchingFiles = filesA.Where(fA =&gt; filesB.Any( fB =&gt; fA.Name == fB.Name // &amp;&amp; fA.LastWriteTime == fB.LastWriteTime ) ) .Select(x =&gt; x.Name); return matchingFiles; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload