public static FileActionResultInfo DeleteOldFiles_Fast(string path, DateTime olderThan, bool pruneemptyFolders = true, bool recursive = true, int fileDeleteLimit = 0) { FileSystemEnumerator e = null; if (recursive) { e = new FileSystemEnumerator(path, EnumertorType.Recursive_FilesAndFolders); } else { e = new FileSystemEnumerator(path, EnumertorType.FilesAndFolders); } var ret = new FileActionResultInfo(); foreach (FileSystemInfo info in e) { if (info is DirectoryInfo) { ret.CountFoldersSearched++; if (pruneemptyFolders && FileHelper.IsDirectoryEmpty_Fast(info.FullName)) { info.Delete(); ret.CountFoldersDeleted++; } else { ret.CountFoldersRemaining++; } } if (info is FileInfo) { ret.CountFilesSearched++; if (info.LastWriteTime < olderThan) { info.Delete(); ret.CountFilesDeleted++; } else { ret.CountFilesRemaining++; } } if (fileDeleteLimit != 0 && ret.CountFilesDeleted >= fileDeleteLimit) { break; } } return(ret); }
/// <summary> /// Deletes files and folders in accordance with the FileActionInfo. FileActionInfo /// is polulated with the result of the operation. /// </summary> public static FileActionResultInfo GetTreeInfo(string path, bool recursive, bool populateList) { FileActionResultInfo ret = new FileActionResultInfo(); FileActionResultInfo child = new FileActionResultInfo(); string[] dirs = new string[] { }; string[] files = new string[] { }; if (!Directory.Exists(path)) { return(ret); } //We're searching this folder, so increment. ret.CountFoldersSearched = 1; ret.CountFoldersDeleted = 0; ret.CountFoldersRemaining = 0; if (recursive) { dirs = Directory.GetDirectories(path); foreach (string dir in dirs) { FileActionResultInfo childInfo = FileHelper.GetTreeInfo(dir, recursive, populateList); child += childInfo; } } //Files to be visited files = Directory.GetFiles(path); //We're searching these files, set the searched count ret.CountFilesSearched = files.Length; ret.CountFilesDeleted = 0; ret.CountFilesRemaining = 0; if (populateList) { if (ret.CountFilesSearched != 0) { ret.FolderFileCounts.Add(new Tuple <string, int>(path, ret.CountFilesSearched)); } } return(ret + child); }
/// <summary> /// Deletes files and folders in accordance with the FileActionInfo. FileActionInfo /// is populated with the result of the operation. /// </summary> public static FileActionResultInfo DeleteOldFiles(string path, DateTime olderThan, bool recursive, bool populateList) { FileActionResultInfo ret = new FileActionResultInfo(); FileActionResultInfo child = new FileActionResultInfo(); string[] dirs = new string[] { }; string[] files = new string[] { }; if (!Directory.Exists(path)) { return(ret); } //We're searching this folder, so increment. ret.CountFoldersSearched = 1; if (recursive) { dirs = Directory.GetDirectories(path); foreach (string dir in dirs) { FileActionResultInfo childInfo = FileHelper.DeleteOldFiles(dir, olderThan, recursive, populateList); if (childInfo.CountFilesRemaining == 0 && childInfo.CountFoldersRemaining == 0 && Directory.GetFiles(dir).Length == 0 && Directory.GetDirectories(dir).Length == 0) { Directory.Delete(dir); //Directory Deleted. Increment. ret.CountFoldersDeleted++; } else { //Directory Remains. Increment. ret.CountFoldersRemaining++; } child += childInfo; } } else { ret.CountFoldersRemaining = Directory.GetDirectories(path).Length; ret.CountFoldersDeleted = 0; } //Files to be visited files = Directory.GetFiles(path); //We're searching these files, set the searched count ret.CountFilesSearched = files.Length; ret.CountFilesDeleted = 0; ret.CountFilesRemaining = 0; //Walk the files foreach (string file in files) { if (File.GetLastWriteTime(file) < olderThan) { File.Delete(file); //File Deleted. Increment. ret.CountFilesDeleted++; } else { //File Remains. Increment. ret.CountFilesRemaining++; } } if (populateList) { if (ret.CountFilesRemaining != 0) { ret.FolderFileCounts.Add(new Tuple <string, int>(path, ret.CountFilesRemaining)); } } return(ret + child); }