Beispiel #1
0
 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) { }
 }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
 /// <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);
         }
     }
 }
Beispiel #4
0
        /// <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);
        }