private void AddFilesRecursive(DirectoryInfo root) { if (!root.Exists || canceled) { return; } try { foreach (var file in root.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)) { bool valid; var result = infoBuilder.Build(file, out valid); if (!valid) { continue; } ++totalFiles; infos.Enqueue(result); } } catch (PathTooLongException) { } blockade.Set(); try { foreach (var dir in root.EnumerateDirectories()) { AddFilesRecursive(dir); } } catch (PathTooLongException) { } }
/// <summary> /// Gets the files recursive. /// </summary> /// <param name="root">The root.</param> /// <param name="builder">The builder.</param> /// <returns></returns> public static IEnumerable <TInfo> GetFilesRecursive(DirectoryInfo root, IInfoBuilder <TInfo> builder) { var results = new List <TInfo>(); try { foreach (var file in root.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)) { bool valid; var result = builder.Build(file, out valid); if (!valid) { continue; } results.Add(result); } } catch (PathTooLongException) { } try { foreach (var dir in root.EnumerateDirectories()) { results.AddRange(GetFilesRecursive(dir, builder)); } } catch (PathTooLongException) { } return(results); }
/// <summary> /// Adds the files async. /// </summary> /// <param name="fileNames">The file names.</param> private async void AddFilesAsync(IEnumerable <string> fileNames) { foreach (var dir in fileNames) { if (Directory.Exists(dir)) { AddFiles(await RecursiveAsyncFileScanner <StorableTaggedFile> .GetFilesRecursiveAsync(new DirectoryInfo(dir), builder)); } else if (File.Exists(dir)) { bool valid; var result = new[] { builder.Build(new FileInfo(dir), out valid) }; if (!valid) { continue; } AddFiles(result); } } }
/// <summary> /// Builds the specified info. /// </summary> /// <param name="info">The info.</param> /// <param name="valid">if set to <c>true</c> [valid].</param> /// <returns></returns> public StorableTaggedFile Build(FileInfo info, out bool valid) { var result = sourceBuilder.Build(info, out valid); return(valid ? StorableTaggedFile.Copy(result) : null); }