Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to filter files from directory using LINQ?

Tags:

c#

.net

linq

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?

like image 522
Hemant Kothiyal Avatar asked Jan 29 '26 05:01

Hemant Kothiyal


1 Answers

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);
like image 115
Rich O'Kelly Avatar answered Jan 30 '26 21:01

Rich O'Kelly