我有两个文件夹A
和B
..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)
它没有用......有什么建议吗?
如果您使用的是.NET 4,则可以使用DirectoryInfo
和EnumerateFiles()
.然后,您可以使用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)