Пример #1
0
 /// <summary>
 /// Run a full scan on from <see cref="StartDirectory"/> find all directories, calculates tha directory size and retrieves the file found extensions
 /// If <see cref="DeepSearch"/> is enable retrieves all sub directories and all files contained in
 /// the root directory.
 /// </summary>
 /// <param name="foundExtensions">The found extensions.</param>
 /// <param name="directorySize">Size of the directory.</param>
 /// <param name="filter">The scanner search filter.</param>
 /// <param name="findFileAction">Defines a costume action when a file is found.</param>
 /// <param name="findDirectoryAction">Defines a costume action when a directory is found.</param>
 public void FullScan(out String[] foundExtensions, out AerithSize directorySize,
                      AerithFilter filter = null, FileScannerHandler findFileAction = null, DirectoryScannerHandler findDirectoryAction = null)
 {
     try
     {
         List <String> extensions = new List <string>();
         long          size       = 0;
         this.Find(filter,
                   //Se agregá al escaneo la recolección de extensiones y el calculo del tamaño del archivo
                   (ref Object input, DirectoryInfo startDirectory, FileInfo currentFile) =>
         {
             string ext = currentFile.Extension.Replace(".", "").ToUpper();
             if (!extensions.Contains(ext))
             {
                 extensions.Add(ext);
             }
             size += currentFile.Length;
             if (findFileAction != null)
             {
                 findFileAction(ref input, startDirectory, currentFile);
             }
         }, findDirectoryAction);
         directorySize   = size.GetSizeFromBytes();
         foundExtensions = extensions.ToArray();
     }
     catch (Exception)
     {
         throw;
     }
 }
Пример #2
0
 /// <summary>
 /// Scans for files and directories parting from a root directory.
 /// When a directory is found a directory scan action is excecuted, and when a file is found
 /// a file scan action.
 /// </summary>
 /// <param name="input">The scanner input.</param>
 /// <param name="startDirectory">The start directory.</param>
 /// <param name="fileScanAction">The file scan action.</param>
 /// <param name="directoryScanAction">The directory scan action.</param>
 /// <param name="recursiveSearch">if set to <c>true</c> recursive search is enabled.
 /// On recursive search the scanner searchs on all subdirectories</param>
 void Scan(ref Object input, DirectoryInfo startDirectory, FileScannerHandler fileScanAction = null, DirectoryScannerHandler directoryScanAction = null, Boolean recursiveSearch = true)
 {
     //Escaneo de directorios
     foreach (DirectoryInfo subDirectory in startDirectory.GetDirectories())
     {
         try
         {
             if (recursiveSearch)
             {
                 this.Scan(ref input, subDirectory, fileScanAction, directoryScanAction, recursiveSearch);
             }
             if (directoryScanAction != null)
             {
                 directoryScanAction(ref input, startDirectory, subDirectory);
             }
         }
         catch (Exception exc)
         {
             if (OmitErrors)
             {
                 continue;
             }
             else
             {
                 throw exc.CreateNamelessException <BlackMateriaException>(ERR_SCANNING, subDirectory.FullName);
             }
         }
     }
     //Escaneo de archivos
     foreach (FileInfo file in startDirectory.GetFiles())
     {
         try
         {
             if (fileScanAction != null)
             {
                 fileScanAction(ref input, startDirectory, file);
             }
         }
         catch (Exception exc)
         {
             if (OmitErrors)
             {
                 continue;
             }
             else
             {
                 throw exc.CreateNamelessException <BlackMateriaException>(ERR_SCANNING, file.FullName);
             }
         }
     }
 }
Пример #3
0
 /// <summary>
 /// Find all the files and directories from <see cref="StartDirectory"/>
 /// If <see cref="DeepSearch"/> is enable retrieves all sub directories and all files contained in
 /// the root directory.
 /// </summary>
 /// <param name="filter">The scanner search filter.</param>
 /// <param name="findFileAction">Defines a costume action when a file is found.</param>
 /// <param name="findDirectoryAction">Defines a costume action when a directory is found.</param>
 /// <exception cref="BlackMateriaException"></exception>
 public void Find(AerithFilter filter = null, FileScannerHandler findFileAction = null, DirectoryScannerHandler findDirectoryAction = null)
 {
     try
     {
         List <FileInfo>      files = new List <FileInfo>();
         List <DirectoryInfo> dirs  = new List <DirectoryInfo>();
         Object scnInput            = new Object[] { files, dirs };
         this.Scan(ref scnInput, this.StartDirectory,
                   //Recolección de archivos
                   (ref Object input, DirectoryInfo startDirectory, FileInfo currentFile) =>
         {
             if ((filter == null) || (filter != null && filter.IsFileValid(currentFile)))
             {
                 var fList = (scnInput as Object[])[0] as List <FileInfo>;
                 fList.Add(currentFile);
                 if (findFileAction != null)
                 {
                     findFileAction(ref input, startDirectory, currentFile);
                 }
             }
         },
                   ////Recolección de directorios
                   (ref Object input, DirectoryInfo startDirectory, DirectoryInfo currentDirectory) =>
         {
             if ((filter == null) || (filter != null && filter.IsDirectoryValid(currentDirectory)))
             {
                 var dList = (scnInput as Object[])[1] as List <DirectoryInfo>;
                 dList.Add(currentDirectory);
                 if (findDirectoryAction != null)
                 {
                     findDirectoryAction(ref input, startDirectory, currentDirectory);
                 }
             }
         }, this.DeepSearch);
         this._Files       = files.ToArray();
         this._Directories = dirs.ToArray();
     }
     catch (Exception exc)
     {
         if (!OmitErrors)
         {
             throw exc;
         }
     }
 }