Reputation:
I have a network folder which can contain up to 10,000 files (usually around 5000).
What is the fatest way I can get the filepath of the most recently created file in that folder using c#?
Currently I am using the below, but wondered if there was a quicker way.
Thanks.
DirectoryInfo di = new DirectoryInfo(xmlFileLocation);
var feedFiles = di.GetFiles("*.xml");
var sortedFeedFile = from s in feedFiles
orderby s.CreationTime descending
select s;
if(sortedFeedFile.Count() > 0){
mostRecentFile = sortedFeedFile.First();
}
Upvotes: 2
Views: 1190
Reputation: 6993
This gets the FileInfo, or null if there are no files, without sorting:
var feedFiles = di.GetFiles("*.xml");
FileInfo mostRecentFile = null;
if (feedFiles.Any())
{
mostRecentFile = feedFiles
.Aggregate((x, c) => x.CreationTime > c.CreationTime ? x : c);
}
Upvotes: 0
Reputation: 29157
I reckon your best chance is to consider creating a Win32 API call- this may or may not be faster, but it might be worth investigating. See WIN32_FILE_ATTRIBUTE_DATA Structure to do this.
Upvotes: 1
Reputation: 3676
Sorting the files is taking you O(nlogn) time. If all you need is the most recently created, it would be faster to just scan through the files and find the most recent---O(n).
Upvotes: 5
Reputation: 17976
This might help... https://web.archive.org/web/20210619183437/https://www.4guysfromrolla.com/articles/060403-1.2.aspx
Upvotes: 0