/// <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)); }
/// <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)); }
public IEnumerable <FileInfo> Matches(FileSortOptions sortOrder, TimeSpan minFileAge) { return(Matches(sortOrder, minFileAge, -1)); }