コード例 #1
0
        /// <summary>
        /// Retrieves files from a file directory.
        /// </summary>
        /// <param name="searchInformation">Search information to query the directory with</param>
        /// <param name="callback">Callback method to be invoked after each provided timeout period elapses</param>
        /// <param name="intCallbackTimeoutSecounds">Number of seconds to wait before invoking the callback method</param>
        /// <returns></returns>
        public FileObjectList GetFilesAsync(SearchInformation searchInformation, SearchInformation.SearchCallback callback, int intCallbackTimeoutSecounds = 10)
        {
            try
            {
                // Validation
                FileObjectList fileObjectList = new FileObjectList();

                // Set Initial Search
                DateTime lastDate = DateTime.Now;

                // Create Directories Searched
                DirectoryObjectList directoriesSearched = new DirectoryObjectList();

                // Get File Asynchronously
                this.GetFilesAsync(searchInformation, callback, ref fileObjectList, ref directoriesSearched, ref lastDate, intCallbackTimeoutSecounds);

                return(fileObjectList);
            }
            catch (Exception ex)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(ex.ToString());
                return(null);
            }
        }
コード例 #2
0
        private static void Callback(FileObjectList files, DirectoryObjectList directories)
        {
            DateTime dt = DateTime.Now;

            Console.WriteLine(
                "Time: " + DateTime.Now.ToLongTimeString() + " | Files: " + files.Count + " | Directories Searched: " + directories.Count);
        }
コード例 #3
0
        /// <summary>
        /// Retrieves files from a file directory
        /// </summary>
        /// <param name="boolRecurse">Flag that determines whether files are retrieved recursively including files from sub-directories</param>
        /// <returns></returns>
        public FileObjectList GetFiles(bool boolRecurse)
        {
            // Create Directory List
            FileObjectList files = this.GetFiles("*", boolRecurse);

            return(files);
        }
コード例 #4
0
        /// <summary>
        /// Deletes files from a directory
        /// </summary>
        /// <param name="boolRecurse">Flag that determines whether files are retrieved recursively including files from sub-directories</param>
        /// <returns></returns>
        public Globals.ResultType DeleteFiles(bool boolRecurse)
        {
            // Get Files
            FileObjectList listFiles = this.GetFiles(boolRecurse);

            // Delete Files
            Globals.ResultType deleteResult = listFiles.Delete();

            return(deleteResult);
        }
コード例 #5
0
        /// <summary>
        /// Retrieves all file content as a string from a directory
        /// </summary>
        /// <param name="directoryObject">Directory to retrieve content from</param>
        /// <param name="strFind">Search string to find</param>
        /// <param name="boolRecurse">Flag that determines whether files are retrieved recursively including files from sub-directories</param>
        /// <returns></returns>
        private static string GetFileContentAsString(this DirectoryObject directoryObject, string strFind, bool boolRecurse)
        {
            // Create File List
            FileObjectList files = directoryObject.GetFiles(strFind, boolRecurse);

            // Load All File Content
            files.ForEach(file => file.Content.Load());

            string strContent = String.Join("\r\n", files.Select(file => file.Content.Value).ToArray());

            return(strContent);
        }
コード例 #6
0
        /// <summary>
        /// Retrieves files from a file directory
        /// </summary>
        /// <param name="strFind">Search string to find</param>
        /// <param name="boolRecurse">Flag that determines whether files are retrieved recursively including files from sub-directories</param>
        /// <returns></returns>
        public FileObjectList GetFiles(string strFind, bool boolRecurse)
        {
            try
            {
                // Determine Search Pattern
                strFind = (strFind == null || strFind == "") ? "*" : strFind;
                strFind = (strFind.Length > 0 && strFind[0].ToString() != "*") ? "*" + strFind + "*" : strFind;

                // Determine Search Option
                System.IO.SearchOption option = (boolRecurse == true) ? System.IO.SearchOption.AllDirectories : System.IO.SearchOption.TopDirectoryOnly;

                // Get Directory Files
                List <string> listFileNames = System.IO.Directory.GetFiles(this.FilePath, strFind, option).ToList();

                // Create File List
                FileObjectList files = new FileObjectList(listFileNames);

                return(files);
            }
            catch (UnauthorizedAccessException e)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(e.Message);
                return(null);
            }
            catch (DirectoryNotFoundException e)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(e.Message);
                return(null);
            }
            catch (IOException e)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(e.Message);
                return(null);
            }
            catch (Exception ex)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(ex.ToString());
                return(null);
            }
        }
コード例 #7
0
        /// <summary>
        /// Copies directory files to a destination directory
        /// </summary>
        /// <param name="destinationDirectoryObject">Destination for directory files to be copied to</param>
        /// <param name="boolOverWrite">Flag for whether or not to overwrite any existing file in the destination directory</param>
        /// <param name="strFind">Search pattern to use retrieving files</param>
        /// <param name="boolRecurse">Flag that determines whether files are retrieved recursively including files from sub-directories</param>
        /// <param name="boolDeleteOriginal">Flag that determines whether to delete the original files</param>
        /// <returns></returns>
        public Globals.ResultType CopyFiles(DirectoryObject destinationDirectoryObject, bool boolOverWrite, string strFind, bool boolRecurse, bool boolDeleteOriginal = false)
        {
            // Get Files
            FileObjectList listFiles = this.GetFiles(strFind, boolRecurse);

            Globals.ResultType copyResult = Globals.ResultType.Success;

            // Loop Files
            foreach (FileObject file in listFiles)
            {
                // Copy File
                Globals.ResultType copyFileResult = file.Copy(destinationDirectoryObject, boolOverWrite, boolDeleteOriginal);

                // Validation
                copyResult = (copyFileResult != Globals.ResultType.Success) ? Globals.ResultType.Failure : Globals.ResultType.Success;
            }

            return(copyResult);
        }
コード例 #8
0
        internal static decimal GetSize(this DirectoryObject directoryObject, FileInformation.FileSizeType fileSizeType, bool boolRecurse)
        {
            try
            {
                // Get Directory Files
                FileObjectList listFiles = directoryObject.GetFiles(boolRecurse);

                // Get Total Size
                decimal decDirectorySize = listFiles.Select(file => (
                                                                (fileSizeType == FileInformation.FileSizeType.Bytes) ? file.Size.Bytes :
                                                                (fileSizeType == FileInformation.FileSizeType.KiloBytes) ? file.Size.KiloBytes :
                                                                (fileSizeType == FileInformation.FileSizeType.MegaBytes) ? file.Size.MegaBytes :
                                                                (fileSizeType == FileInformation.FileSizeType.GigaBytes) ? file.Size.GigaBytes : 0)).Sum();

                return(decDirectorySize);
            }
            catch (Exception ex)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(ex.ToString());
                return(-1);
            }
        }
コード例 #9
0
        internal List <FileObject> GetSearchFilesFiltered(FileObjectList fileObjectList)
        {
            List <FileObject> listFiles = new List <FileObject>(fileObjectList.ToArray());

            #region Filter By Date

            // Validation
            if (this.UseDateInformation == true)
            {
                if (this.DateType == FileInformation.FileDatePropertyType.CreationDate)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.CreationDate > this.MinimumDate).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.CreationDate < this.MaximumDate).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.CreationDate > this.MinimumDate && file.CreationDate < this.MaximumDate).ToList();
                    }
                }
                else if (this.DateType == FileInformation.FileDatePropertyType.LastAccessedDate)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.LastAccessedDate > this.MinimumDate).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.LastAccessedDate < this.MaximumDate).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.LastAccessedDate > this.MinimumDate && file.LastAccessedDate < this.MaximumDate).ToList();
                    }
                }
                else if (this.DateType == FileInformation.FileDatePropertyType.LastWriteDate)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.LastWriteDate > this.MinimumDate).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.LastWriteDate < this.MaximumDate).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.LastWriteDate > this.MinimumDate && file.LastWriteDate < this.MaximumDate).ToList();
                    }
                }
            }

            #endregion

            #region Filter By Size

            // Validation
            if (this.UseSizeInformation == true)
            {
                if (this.SizeType == FileInformation.FileSizeType.Bytes)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.Bytes > this.MinimumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.Bytes < this.MaximumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.Size.Bytes > this.MinimumSize && file.Size.Bytes < this.MaximumSize).ToList();
                    }
                }
                else if (this.SizeType == FileInformation.FileSizeType.KiloBytes)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.KiloBytes > this.MinimumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.KiloBytes < this.MaximumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.Size.KiloBytes > this.MinimumSize && file.Size.KiloBytes < this.MaximumSize).ToList();
                    }
                }
                else if (this.SizeType == FileInformation.FileSizeType.MegaBytes)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.MegaBytes > this.MinimumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.MegaBytes < this.MaximumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.Size.MegaBytes > this.MinimumSize && file.Size.MegaBytes < this.MaximumSize).ToList();
                    }
                }
                else if (this.SizeType == FileInformation.FileSizeType.GigaBytes)
                {
                    if (this.DateSearchType == FileInformation.FileSearchType.GreaterThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.GigaBytes > this.MinimumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.LessThan)
                    {
                        listFiles = listFiles.Where(file => file.Size.GigaBytes < this.MaximumSize).ToList();
                    }
                    else if (this.DateSearchType == FileInformation.FileSearchType.Between)
                    {
                        listFiles = listFiles
                                    .Where(file => file.Size.GigaBytes > this.MinimumSize && file.Size.GigaBytes < this.MaximumSize).ToList();
                    }
                }
            }

            #endregion

            return(listFiles);
        }
コード例 #10
0
        private FileObjectList GetFilesAsync(SearchInformation searchInformation, SearchInformation.SearchCallback callback,
                                             ref FileObjectList fileObjectList, ref DirectoryObjectList directoriesSearched, ref DateTime lastDate, int intCallbackTimeoutSecounds = 10)
        {
            try
            {
                #region Get Files

                // Get Directory Files - Top Level Only
                List <string> listFileNames = System.IO.Directory.GetFiles(this.FilePath, searchInformation.SearchPattern, System.IO.SearchOption.TopDirectoryOnly).ToList();

                // Create File List
                FileObjectList listFiles = new FileObjectList(listFileNames);

                // Validation
                if (listFiles.Count > 0)
                {
                    // Filter Files By Search Information
                    List <FileObject> filesToAdd = searchInformation.GetSearchFilesFiltered(listFiles);

                    // Create File List
                    fileObjectList.AddRange(filesToAdd.ToArray());

                    // Distinct List
                    fileObjectList = new FileObjectList(fileObjectList.Distinct().ToList());
                }

                // Add Directory To Searched List
                directoriesSearched.Add(this);

                #endregion

                #region Recurse Sub Directories

                // Loop SubDirectories
                foreach (DirectoryObject directory in this.SubDirectories)
                {
                    // Get Sub Directory Files
                    directory.GetFilesAsync(searchInformation, callback, ref fileObjectList, ref directoriesSearched, ref lastDate, intCallbackTimeoutSecounds);
                }

                #endregion

                #region Invoke Callback

                // Check Time For Callback
                if (fileObjectList != null && DateTime.Now > lastDate.AddSeconds(intCallbackTimeoutSecounds))
                {
                    // Invoke Callback
                    callback.Invoke(fileObjectList, directoriesSearched);
                    lastDate = DateTime.Now;
                }

                #endregion

                return(fileObjectList);
            }
            catch (Exception ex)
            {
                // To Be Implemented: Throw Custom Exception...
                Console.WriteLine(ex.ToString());
                return(null);
            }
        }