コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }