The problem with using Directory.GetFiles()
is that is walks the entire filesystem first, then returns all matches as an array. Even if the very first file examined is the one and only match, it still walks the entire filesystem from the specified root before returning the one match.
Instead, use EnumerateFiles()
to do a lazy walk, stopping when the first match is encountered, thus:
DirectoryInfo root = new DirectoryInfo( @"C:\" ) ;
string pattern = "*.DesiredFileExtension" ;
FileInfo desiredFile = root.EnumerateFiles( pattern , SearchOption.AllDirectories )
.First()
;
It will throw an exception if the file's not found. Use FirstOrDefault()
to get a null
value instead.