如何根据C#中的名称比较两个类似文件的文件夹?

bal*_*569 3 c#

我有两个文件夹AB..Inside有多个文件,里面B多个文件都在那里..我必须检查A中的文件与B中的文件相同的文件...我尝试这样的特定文件名

void DirSearch(string sDir)
        {
          List<string> lstFilesFound = new List<string>();
                foreach (string d in Directory.GetDirectories(sDir))
                    {
                        foreach (string f in Directory.GetFiles(d,"MsBuild_Tracker.proj")
                           {
                                lstFilesFound.Add(f);
                           }
                            DirSearch(d);
                    }
       }
Run Code Online (Sandbox Code Playgroud)

它正在工作..我尝试这样两个文件夹

foreach (string d in Directory.GetDirectories(sDir))
                {
                    foreach (string f in Directory.GetDirectories(dDir))
                    {
                        foreach (string g in Directory.GetFiles(d, f))
                        {
                            lstFilesFound.Add(g);
                        }
                        DirSearch(d, f);
                    }
                }
Run Code Online (Sandbox Code Playgroud)

它没有用......有什么建议吗?

Bri*_*sen 8

如果您使用的是.NET 4,则可以使用DirectoryInfoEnumerateFiles().然后,您可以使用LINQ加入这两个目录以获取两个目录之间的公共文件.

var dir1 = new DirectoryInfo(@"c:\temp1");
var dir2 = new DirectoryInfo(@"c:\temp2");

var filesinboth = from f1 in dir1.EnumerateFiles()
                  join f2 in dir2.EnumerateFiles() on f1.Name equals f2.Name
                  select f1.Name;
Run Code Online (Sandbox Code Playgroud)

或者where如果您想要附加条件,您可以使用.

var filesinboth = from f1 in dir1.EnumerateFiles()
                  from f2 in dir2.EnumerateFiles()
                  where f1.Name == f2.Name // and some other condition
                  select f1.Name;
Run Code Online (Sandbox Code Playgroud)

这些都会给你流string.如果需要实际FileInfo实例,select请将查询的一部分更改为返回f1而不是f1.Name.

如果您使用的是.NET 3.5,则需要使用,GetFiles()而不是返回FileInfo[].所以查询看起来像这样:

var filesinboth = from f1 in dir1.GetFiles()
                  join f2 in dir2.GetFiles() on f1.Name equals f2.Name
                  select f1.Name;
Run Code Online (Sandbox Code Playgroud)

var filesinboth = from f1 in dir1.GetFiles()
                  from f2 in dir2.GetFiles()
                  where f1.Name == f2.Name // and some other condition
                  select f1.Name;
Run Code Online (Sandbox Code Playgroud)