Mohamed Al-Hosary
Mohamed Al-Hosary

Reputation: 508

Get count of files from directory without enumerating files in c#

I am using Directory.EnumerateFiles() and Directory.GetFiles() to get the count of files in a specific directory in c#. The problem is that theses methods are slow because they enumerate files to get there count.

How to get the count of files in Directory without enumerating files in c#?

Upvotes: 7

Views: 8591

Answers (4)

Constantin Treiber
Constantin Treiber

Reputation: 420

I actually never tried a faster way but its a good question.. By searching I've found this

http://www.codeproject.com/Articles/38959/A-Faster-Directory-Enumerator

The Benchmark comparison looks quite nice..

MayBe this helps..

Upvotes: 4

S.L.
S.L.

Reputation: 1076

I think you have to use Directory.GetFiles() or the DirectoryInfo class.

The Advantage is, that you can use an overload of GetFIles to search for files inside subdirectories e.g.

int allfilesCount = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length;

MSDN DirectoryInfo

Mybe you could try

Directory.EnumerateFiles().Count() 

if it is faster.

Upvotes: -2

Andreas
Andreas

Reputation: 116

You have to enumerate through the folder in order to get all the files.

However, you can still do something to improve the performance. I suggest you have a look at those benchmark tests (Get1 method):

https://stackoverflow.com/a/17756559/3876750

It seems like the following method provides the best performance, according to the benchmark test:

private static int Get1(string myBaseDirectory)
{
    DirectoryInfo dirInfo = new DirectoryInfo(myBaseDirectory);
    return dirInfo.EnumerateDirectories()
           .AsParallel()
           .SelectMany(di => di.EnumerateFiles("*.*", SearchOption.AllDirectories))
           .Count();
}

Upvotes: 9

Max
Max

Reputation: 156

hi maybe this help it return string[]

String[] files = Directory.GetFileSystemEntries("path");

Upvotes: -2

Related Questions