mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 11:16:51 +02:00
EnumerateFileSystemInfos uses EnumerationOptions (#6933)
* Changed EnumerateFileSystemInfos to EnumerationOptions we don't have to catch the exceptions ourself. * Change Matchtype to mimic old search method. Co-authored-by: p-storm <paul.de.man@gmail.com>
This commit is contained in:
@@ -12,41 +12,22 @@ namespace Microsoft.Plugin.Folder.Sources
|
||||
{
|
||||
public class QueryFileSystemInfo : DirectoryWrapper, IQueryFileSystemInfo
|
||||
{
|
||||
public IEnumerable<DisplayFileInfo> MatchFileSystemInfo(string search, string incompleteName, SearchOption searchOption)
|
||||
public IEnumerable<DisplayFileInfo> MatchFileSystemInfo(string search, string incompleteName, bool isRecursive)
|
||||
{
|
||||
// search folder and add results
|
||||
var directoryInfo = new DirectoryInfo(search);
|
||||
var fileSystemInfos = directoryInfo.EnumerateFileSystemInfos(incompleteName, searchOption);
|
||||
|
||||
return SafeEnumerateFileSystemInfos(fileSystemInfos)
|
||||
.Where(fileSystemInfo => (fileSystemInfo.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
|
||||
.Select(CreateDisplayFileInfo);
|
||||
}
|
||||
|
||||
private static IEnumerable<FileSystemInfo> SafeEnumerateFileSystemInfos(IEnumerable<FileSystemInfo> fileSystemInfos)
|
||||
{
|
||||
using (var enumerator = fileSystemInfos.GetEnumerator())
|
||||
var fileSystemInfos = directoryInfo.EnumerateFileSystemInfos(incompleteName, new EnumerationOptions()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
FileSystemInfo currentFileSystemInfo;
|
||||
try
|
||||
{
|
||||
if (!enumerator.MoveNext())
|
||||
{
|
||||
break;
|
||||
}
|
||||
MatchType = MatchType.Win32,
|
||||
RecurseSubdirectories = isRecursive,
|
||||
IgnoreInaccessible = true,
|
||||
ReturnSpecialDirectories = false,
|
||||
AttributesToSkip = FileAttributes.Hidden,
|
||||
MatchCasing = MatchCasing.PlatformDefault,
|
||||
});
|
||||
|
||||
currentFileSystemInfo = enumerator.Current;
|
||||
}
|
||||
catch (UnauthorizedAccessException)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
yield return currentFileSystemInfo;
|
||||
}
|
||||
}
|
||||
return fileSystemInfos
|
||||
.Select(CreateDisplayFileInfo);
|
||||
}
|
||||
|
||||
private static DisplayFileInfo CreateDisplayFileInfo(FileSystemInfo fileSystemInfo)
|
||||
|
||||
Reference in New Issue
Block a user