/// <summary>
        /// Finds first file that matches pattern
        /// </summary>
        /// <returns>FileInfo for first file or null</returns>
        public FileInfo FindFirstFile(FileSortOptions sortOrder, TimeSpan minFileAge)
        {
            // Set the search options depending on directory matches
            SearchOption searchOpt = SearchOption.TopDirectoryOnly;

            if (IncludeSubDirs)
            {
                searchOpt = SearchOption.AllDirectories;
            }

            IEnumerable <FileInfo> files = null;
            DirectoryInfo          diTop = new DirectoryInfo(m_path);

            foreach (string filter in m_filterList)
            {
                DateTime timeStamp = DateTime.UtcNow;

                // Only send files which are at least minFileAge old
                if (minFileAge != TimeSpan.Zero)
                {
                    timeStamp = DateTime.UtcNow.Subtract(minFileAge);
                }

                if (sortOrder == FileSortOptions.None)
                {
                    files = from file in diTop.EnumerateFiles(filter, searchOpt)
                            where file.CreationTimeUtc < timeStamp
                            select file;
                }
                else if (sortOrder == FileSortOptions.CreationTimeUtcAscending)
                {
                    // LINQ query to sort by CreationTime
                    files = from file in diTop.EnumerateFiles(filter, searchOpt)
                            where file.CreationTimeUtc < timeStamp
                            orderby file.CreationTimeUtc ascending
                            select file;
                }
                else if (sortOrder == FileSortOptions.CreationTimeUtcDescending)
                {
                    files = from file in diTop.EnumerateFiles(filter, searchOpt)
                            where file.CreationTimeUtc < timeStamp
                            orderby file.CreationTimeUtc descending
                            select file;
                }
                else if (sortOrder == FileSortOptions.FileNameAscending)
                {
                    files = from file in diTop.EnumerateFiles(filter, searchOpt)
                            where file.CreationTimeUtc < timeStamp
                            orderby file.Name ascending
                            select file;
                }
                else if (sortOrder == FileSortOptions.FileNameDescending)
                {
                    files = from file in diTop.EnumerateFiles(filter, searchOpt)
                            where file.CreationTimeUtc < timeStamp
                            orderby file.Name descending
                            select file;
                }

                // Remove unwanted files
                if (!IncludeEmptyFiles)
                {
                    files = from file in files where file.Length > 0 select file;
                }

                if (!IncludeHiddenFiles)
                {
                    files = from file in files where !file.Attributes.HasFlag(FileAttributes.Hidden) select file;
                }

                if (!IncludeReadOnlyFiles)
                {
                    files = from file in files where !file.Attributes.HasFlag(FileAttributes.ReadOnly) select file;
                }

                if (!IncludeSystemFiles)
                {
                    files = from file in files where !file.Attributes.HasFlag(FileAttributes.System) select file;
                }

                if (!IncludeTemporatyFiles)
                {
                    files = from file in files where !file.Attributes.HasFlag(FileAttributes.Temporary) select file;
                }

                // We have atleast one file matched, so break loop
                if (files != null && files.Count() > 0)
                {
                    break;
                }
            }

            if (files != null)
            {
                return(files.FirstOrDefault());
            }
            else
            {
                return(null);
            }
        }
 public FileInfo FindFirstFile(FileSortOptions sortOrder)
 {
     return(FindFirstFile(sortOrder, TimeSpan.Zero));
 }
Beispiel #3
0
        /// <summary>
        /// Get an enumerator that returns all of the files that match the wildcards that
        /// are in any of the directories to be searched.
        /// </summary>
        /// <returns>An IEnumerable that returns all matching files one by one.</returns>
        /// <remarks>The enumerator that is returned finds files using a lazy algorithm that
        /// searches directories incrementally as matches are consumed.</remarks>
        public IEnumerable <FileInfo> Matches(FileSortOptions sortOrder, TimeSpan minFileAge, int maxNumberOfFiles)
        {
            // Set the search options depending on directory matches
            SearchOption searchOpt = SearchOption.TopDirectoryOnly;

            if (IncludeSubDirs)
            {
                searchOpt = SearchOption.AllDirectories;
            }

            DirectoryInfo          diTop = new DirectoryInfo(m_path);
            IEnumerable <FileInfo> files = null;

            foreach (string filter in m_filterList)
            {
                IEnumerable <FileInfo> tmpFiles = null;

                DateTime timeStamp = DateTime.UtcNow;

                // Only send files which are at least minFileAge old
                if (minFileAge != TimeSpan.Zero)
                {
                    timeStamp = DateTime.UtcNow.Subtract(minFileAge);
                }

                if (sortOrder == FileSortOptions.None)
                {
                    tmpFiles = from file in diTop.EnumerateFiles(filter, searchOpt)
                               where file.CreationTimeUtc < timeStamp
                               select file;
                }
                else if (sortOrder == FileSortOptions.CreationTimeUtcAscending)
                {
                    // LINQ query to sort by CreationTime
                    tmpFiles = from file in diTop.EnumerateFiles(filter, searchOpt)
                               where file.CreationTimeUtc < timeStamp
                               orderby file.CreationTimeUtc ascending
                               select file;
                }
                else if (sortOrder == FileSortOptions.CreationTimeUtcDescending)
                {
                    tmpFiles = from file in diTop.EnumerateFiles(filter, searchOpt)
                               where file.CreationTimeUtc < timeStamp
                               orderby file.CreationTimeUtc descending
                               select file;
                }
                else if (sortOrder == FileSortOptions.FileNameAscending)
                {
                    tmpFiles = from file in diTop.EnumerateFiles(filter, searchOpt)
                               where file.CreationTimeUtc < timeStamp
                               orderby file.Name ascending
                               select file;
                }
                else if (sortOrder == FileSortOptions.FileNameDescending)
                {
                    tmpFiles = from file in diTop.EnumerateFiles(filter, searchOpt)
                               where file.CreationTimeUtc < timeStamp
                               orderby file.Name descending
                               select file;
                }

                // Remove unwanted files
                if (!IncludeEmptyFiles)
                {
                    tmpFiles = from file in tmpFiles where file.Length > 0 select file;
                }

                if (!IncludeHiddenFiles)
                {
                    tmpFiles = from file in tmpFiles where !file.Attributes.HasFlag(FileAttributes.Hidden) select file;
                }

                if (!IncludeReadOnlyFiles)
                {
                    tmpFiles = from file in tmpFiles where !file.Attributes.HasFlag(FileAttributes.ReadOnly) select file;
                }

                if (!IncludeSystemFiles)
                {
                    tmpFiles = from file in tmpFiles where !file.Attributes.HasFlag(FileAttributes.System) select file;
                }

                if (!IncludeTemporatyFiles)
                {
                    tmpFiles = from file in tmpFiles where !file.Attributes.HasFlag(FileAttributes.Temporary) select file;
                }


                // Concatenate the files
                if (files != null)
                {
                    files = files.Concat(tmpFiles);
                }
                else
                {
                    files = tmpFiles;
                }
            }

            if (maxNumberOfFiles == -1)
            {
                return(files);
            }
            else
            {
                return(files.Take(maxNumberOfFiles));
            }
        }
 public IEnumerable <FileInfo> Matches(FileSortOptions sortOrder)
 {
     return(Matches(sortOrder, TimeSpan.Zero));
 }
Beispiel #5
0
 public IEnumerable <FileInfo> Matches(FileSortOptions sortOrder, TimeSpan minFileAge)
 {
     return(Matches(sortOrder, minFileAge, -1));
 }