What is the most efficient way to find all exe files on disk using C#?
It will be done in background thread in program so disk usage should be as small as possible.
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The link you provided is the most efficient way in C# (with .Net 4.0):
Directory.EnumerateFiles Method
Prior versions of .Net had to use a slower method that caused memory issues on large drives, @hatchet showed a great example: Is there a faster way to scan through a directory recursively in .NET?
I wouldn’t suggest using the TPL as Jon Skeet mentions here:
Task Parallel Library for directory traversal
If you see the first comment in this MSDN link: Iterate File Directories with the Parallel Class I dont even think Microsoft had success with this TPL method either.
The other suggestion I have is using LogParser and you can use it with C#! Its a free Microsoft product but I’m not sure about re-dist permissions, I had to include it in my package separately last time I used it. It full on flys, faster than a speeding train!
As per @spender comment I found a Log Parser example that finds files dated 180 days and older, you could try it out and adapt it if its useful:
%source% could be something like c:\*.exe as shown in the argument c:\temp\*.*. Save the above as cc.sql, run it with the following syntax:
EDIT
Thanks for the upvotes guys! I made this Event Analyser app in 2005 (before .net 2.0 was released) and since the Log Parser suggestion was so popular I thought I’d share the way you can use LogParser in .Net
Open the VisualLogParser solution in VS2010, ignore the prompt about debugging, after the solution loads, F5, set the combo-box to FS (FileSystem), paste in this query and press go.
At the same time you may wish run any other .Net application that searches directories and compare the results!!!