Reputation: 4152
In my program c#, i am using LINQ to fetch all file from directory for processing as following
var FilesToProcess = from filePath in Directory.GetFiles(sDirectory)
where File.GetCreationTime(filePath).BusinessDaysUntil(DateTime.Today)
select filePath;
if (FilesToProcess.Any())
{
List<string> process = (from string s in FilesToProcess
where ((s.EndsWith(".ext")) || (s.EndsWith(".xml")))
select s).ToList();
}
But In my case i have xml and txt files of same name like A.xml and A.txt similarly B.xml and B.txt and same for others.
I want to use LINQ to fetch both files of same name for processing as following
Processfile(string xmlfile, string txtfile)
As per my above code, i am getting all files(xml, txt) from directory, but i don't know to proceed further.
Please help to filter the files of same name but different extention?
Upvotes: 2
Views: 13806
Reputation: 41767
You can use the Linq GroupBy method to do this, eg:
DirectoryInfo directory = new DirectoryInfo(sDirectory);
var filePairs = directory
.GetFiles("*.xml")
.Union(directory.GetFiles("*.txt"))
.GroupBy(file => file.Name);
Or if you wish to get just the files in pairs:
var filePairs = directory
.GetFiles("*.xml")
.Union(directory.GetFiles("*.txt"))
.GroupBy(file => file.Name)
.Select(grp => new
{
XmlFile = grp.FirstOrDefault(file => file.Extension == "xml"),
TxtFile = grp.FirstOrDefault(file => file.Extension == "txt")
})
.Where(pair => pair.XmlFile != null && pair.TxtFile!= null);
Upvotes: 12