How to read file names recursively from a subfolder using LINQ

How to read a file name with an extension dllfrom a directory and from its subfolders recursively using the LINQ or LAMBDA expression.

Now I use Nested for each loop for this. Is there a way to do this using a LINQ or LAMBDA expression?

+5
source share
5 answers

You do not need to use LINQ for this - built into the infrastructure :

string[] files = Directory.GetFiles(directory, "*.dll",
                                    SearchOption.AllDirectories);

or if you are using .NET 4 :

IEnumerable<string> files = Directory.EnumerateFiles(directory, "*.dll",
                                                    SearchOption.AllDirectories);

, LINQ . , . , , ...

+17

+ :

DirectoryInfo di = new DirectoryInfo(@"d:\somewhere\");
var q = from i in di.GetFiles("*.dll", SearchOption.AllDirectories)
        select i.Name;

:

DirectoryInfo di = new DirectoryInfo(@"d:\somewhere\");
var q = from i in di.GetFiles("*.dll", SearchOption.AllDirectories)
        select System.IO.Path.GetFileNameWithoutExtension(i.Name);
+4

:

Action<string, List<string>> discoverFiles = null;

discoverFiles = new Action<string, List<string>>((dir, list) =>
    {
        try
        {
            foreach (var subDir in Directory.GetDirectories(dir))
                discoverFiles(string.Concat(subDir), list);

            foreach (var dllFile in Directory.GetFiles(dir, "*.dll"))
            {
                var fileNameOnly = Path.GetFileName(dllFile);
                if (!list.Contains(fileNameOnly))
                    list.Add(fileNameOnly);
            }
        }
        catch (IOException)
        {
            // decide what to do here
        }
    });

// usage:
var targetList = new List<string>();
discoverFiles("c:\\MyDirectory", targetList);

foreach (var item in targetList)
    Debug.WriteLine(item);

. , , ( //), , , - -.

+3
IEnumerable<string> filenames = Directory.GetFiles(searchDirectory, "*.dll",
                                                   SearchOption.AllDirectories)
                                         .Select(s => Path.GetFileName(s));

Directory.GetFiles() , . Select , .

+2

, System.IO. , , , Directory.EnumerateFiles, , , , , File.ReadAllBytes.

0

All Articles