Reputation: 508
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
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
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;
Mybe you could try
Directory.EnumerateFiles().Count()
if it is faster.
Upvotes: -2
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
Reputation: 156
hi maybe this help it return string[]
String[] files = Directory.GetFileSystemEntries("path");
Upvotes: -2