Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
262 views
in Technique[技术] by (71.8m points)

c# - How to filter files from directory using 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...