private static DirectoryDataModel Adapt(DirectoryInfo directoryInfo, FileSearchParameters parameters) { var subDirectories = directoryInfo.GetDirectories().Select(di => Adapt(di, parameters)).ToList(); var fileInfos = directoryInfo.EnumerateFiles("*", SearchOption.TopDirectoryOnly); if (!string.IsNullOrEmpty(parameters.FileName)) { fileInfos = fileInfos.Where(f => f.Name.IndexOf(parameters.FileName, StringComparison.OrdinalIgnoreCase) > -1); } if (parameters.FileType != null) { fileInfos = fileInfos.Where(f => f.Extension.ToUpperInvariant() == parameters.FileType.Extension); } var files = fileInfos.Select( f => new FileDataModel { FileExtension = f.Extension, FileName = f.Name, FilePath = f.FullName, Content = string.Empty }); var result = new DirectoryDataModel( directoryInfo.FullName, directoryInfo.Name, subDirectories, files.ToList()); return(result); }
public async Task <IReadOnlyCollection <Directory> > SearchFilesAsync(FileSearchParameters parameters) { var directoryDataModels = await _directoryServant.SearchFilesAsync(parameters); var result = directoryDataModels.Select(AdaptDirectory).ToList(); return(result); }
public async Task <IReadOnlyCollection <DirectoryDataModel> > SearchFilesAsync(FileSearchParameters parameters) { var directoryInfos = System.IO.Directory.EnumerateDirectories(parameters.RootPath, "*", SearchOption.AllDirectories) .Select(f => new DirectoryInfo(f)); var directories = await Task.Run( () => { return(directoryInfos.AsParallel() .Select(di => Adapt(di, parameters)) .ToList()); }); RemoveEmptyDirectories(directories); return(directories); }