예제 #1
0
        private static void Main(string[] args)
        {
            Console.WriteLine("West Wind DeleteFiles Utility\r\n" +
                            "(c) 2012, West Wind Technologies - www.west-wind.com\r\n");

            if (args == null || args.Length == 0 || args[0] == "HELP" || args[0] == "/?")
            {
            string options =
                @"
            DeleteFiles <filespec> -r -f -y -l -d10 -s3600

            Commands:
            ---------
            HELP || /?      This help display

            Options:
            --------
            pathSpec    Path and File Spec. Make sure to add a filespec
            -r          Delete files [R]ecursively
            -f          Remove empty [F]olders
            -y          Delete to Rec[Y]le Bin (can be slow!)
            -l          Disp[L]ays items that would be deleted
            -dXX        Number of [D]ays before the current date to delete
            -sXX        Number of [S]econds before the current time to delete
            (seconds override days)
            if neither -d or -s no date filter is applied

            Examples:
            ---------
            DeleteFiles c:\temp\*.* -r -f        - deletes all files in temp folder recursively
                                    and deletes empty folders
            DeleteFiles c:\temp\*.* -r -f -d10   - delete files 10 days or older
            DeleteFiles c:\temp\*.* -r -f -s3600 - delete files older than an hour
            DeleteFiles ""c:\My Files\*.*"" -r   - deletes all files in temp folder recursively

            ";

            Console.WriteLine(options);
            return;

            }

            DeleteFilesCommandLineParser cmdLine = new DeleteFilesCommandLineParser();
            cmdLine.Parse();

            if (cmdLine.DisplayOnly)
            Console.WriteLine(DeleteFiles.Properties.Resources.DisplayOnlyModeNoFilesFoldersAreDeletedRN);

            DeleteFilesProcessor del = new DeleteFilesProcessor();
            del.ProcessFiles(cmdLine);

            #if DEBUG
            Console.WriteLine("Done. Press any key to exit...");
            Console.ReadKey();
            #endif
        }
예제 #2
0
        private static void Main(string[] args)
        {
            Version v       = Assembly.GetExecutingAssembly().GetName().Version;
            string  version = v.Major + "." + v.Minor;

            Console.WriteLine("West Wind DeleteFiles [Version {0}]\r\n", version);

            if (args == null || args.Length == 0 || args[0] == "HELP" || args[0] == "/?")
            {
                string options =
                    @"
DeleteFiles <filespec> -r -f -y -l -d10 -s3600

Commands:
---------
HELP || /?      This help display           

Options:
--------
pathSpec    FilePath and File Spec. Make sure to add a filespec
-r          Delete files [R]ecursively     
-f          Remove empty [F]olders (start folder is not deleted)
-y          Delete to Rec[Y]le Bin (can be slow!)
-l          Disp[L]ays items that would be deleted
-q0..2      Quiet mode: -q0 - all (default)  -q1 - No file detail
                        -q2 - No file detail, no summary
-dXX        Number of [D]ays before the current date to delete            
-sXX        Number of [S]econds before the current time to delete
            (seconds override days)
            if neither -d or -s no date filter is applied (default)

Examples:
---------
DeleteFiles c:\temp\*.* -r -f        - deletes all files in temp folder recursively 
                                       and deletes empty folders
DeleteFiles *.tmp -r                 - delete .tmp files recursively from current folder down
DeleteFiles ""c:\My Files\*.*"" -r   - deletes all files leaves folders
DeleteFiles c:\temp\*.* -r -f -d10   - delete files 10 days or older 
DeleteFiles c:\temp\*.* -r -f -s3600 - delete files older than an hour
DeleteFiles c:\thumbs.db -r          - delete thumbs.db files on entire drive

";

                Console.WriteLine(options);
                return;
            }

            DeleteFilesCommandLineParser cmdLine = new DeleteFilesCommandLineParser();

            cmdLine.Parse();

            if (cmdLine.DisplayOnly)
            {
                Console.WriteLine(DeleteFiles.Properties.Resources.DisplayOnlyModeNoFilesFoldersAreDeletedRN);
            }

            DeleteFilesProcessor del = new DeleteFilesProcessor(cmdLine);

            del.ProcessFiles();


#if DEBUG
            Console.WriteLine("Done. Press any key to exit...");
            Console.ReadKey();
#endif
        }
예제 #3
0
        protected bool ProcessFolder(string activeFolder, DeleteFilesCommandLineParser parser)
        {
            ZetaLongPaths.ZlpFileInfo[] files;

            try
            {
                var folder = new ZetaLongPaths.ZlpDirectoryInfo(activeFolder);
                files = folder.GetFiles(parser.FileSpec);
            }
            catch (Exception e)
            {
                OnShowMessage(Resources.ErrorOpening + activeFolder + ". " + e.GetBaseException().Message);
                return(false);
            }
            bool success = true;

            foreach (var fi in files)
            {
                //var fi = new FileInfo(file);
                string file = fi.FullName;
                if (!fi.Exists)
                {
                    continue;
                }

                try
                {
                    if (IsFileToBeDeleted(fi.Name))
                    {
                        long fsize = fi.Length;

                        if (!parser.DisplayOnly)
                        {
                            if (parser.UseRecycleBin)
                            {
                                fi.MoveToRecycleBin();
                            }
                            //FileSystem.DeleteFile(file, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
                            else
                            {
                                try
                                {
                                    File.Delete(fi.FullName);
                                }
                                catch (PathTooLongException ex)
                                {
                                    // try again with long path routines
                                    fi.Delete();
                                }
                            }
                            catch (UnauthorizedAccessException ex)
                            {
                                fi.Attributes = ZetaLongPaths.Native.FileAttributes.Normal;
                                fi.Delete();
                            }
                        }
                        OnShowMessage(Resources.Deleting + file);
                        FileCount++;

                        FileSizeCount += fsize;
                    }
예제 #4
0
 public DeleteFilesProcessor(DeleteFilesCommandLineParser parser = null)
 {
     Parser = parser;
 }
예제 #5
0
        private static void Main(string[] args)
        {
            Version v = Assembly.GetExecutingAssembly().GetName().Version;
            string version = v.Major + "." + v.Minor;

            Console.WriteLine("West Wind DeleteFiles [Version {0}]\r\n", version);

            if (args == null || args.Length == 0 || args[0] == "HELP" || args[0] == "/?")
            {
                string options =
                    @"
            DeleteFiles <filespec> -r -f -y -l -d10 -s3600

            Commands:
            ---------
            HELP || /?      This help display

            Options:
            --------
            pathSpec    FilePath and File Spec. Make sure to add a filespec
            -r          Delete files [R]ecursively
            -f          Remove empty [F]olders (start folder is not deleted)
            -y          Delete to Rec[Y]le Bin (can be slow!)
            -l          Disp[L]ays items that would be deleted
            -q0..2      Quiet mode: -q0 - all (default)  -q1 - No file detail
                        -q2 - No file detail, no summary
            -dXX        Number of [D]ays before the current date to delete
            -sXX        Number of [S]econds before the current time to delete
            (seconds override days)
            if neither -d or -s no date filter is applied (default)

            Examples:
            ---------
            DeleteFiles c:\temp\*.* -r -f        - deletes all files in temp folder recursively
                                       and deletes empty folders
            DeleteFiles *.tmp -r                 - delete .tmp files recursively from current folder down
            DeleteFiles ""c:\My Files\*.*"" -r   - deletes all files leaves folders
            DeleteFiles c:\temp\*.* -r -f -d10   - delete files 10 days or older
            DeleteFiles c:\temp\*.* -r -f -s3600 - delete files older than an hour
            DeleteFiles c:\thumbs.db -r          - delete thumbs.db files on entire drive

            ";

                Console.WriteLine(options);
                return;
            }

            DeleteFilesCommandLineParser cmdLine = new DeleteFilesCommandLineParser();
            cmdLine.Parse();

            if (cmdLine.DisplayOnly)
                Console.WriteLine(DeleteFiles.Properties.Resources.DisplayOnlyModeNoFilesFoldersAreDeletedRN);

            DeleteFilesProcessor del = new DeleteFilesProcessor(cmdLine);
            del.ProcessFiles();

            #if DEBUG
            Console.WriteLine("Done. Press any key to exit...");
            Console.ReadKey();
            #endif
        }
예제 #6
0
 public DeleteFilesProcessor(DeleteFilesCommandLineParser parser = null)
 {
     Parser = parser;
 }
예제 #7
0
        protected bool ProcessFolder(string activeFolder, DeleteFilesCommandLineParser parser)
        {
            ZetaLongPaths.ZlpFileInfo[] files;

            try
            {
                var folder = new ZetaLongPaths.ZlpDirectoryInfo(activeFolder);
                files = folder.GetFiles(parser.FileSpec);
            }
            catch (Exception e)
            {
                OnShowMessage(Resources.ErrorOpening + activeFolder + ". " + e.GetBaseException().Message);
                return false;
            }
            bool success = true;
            foreach (var fi in files)
            {
                //var fi = new FileInfo(file);
                string file = fi.FullName;
                if (!fi.Exists)
                    continue;

                try
                {
                    if (IsFileToBeDeleted(fi.FullName))
                    {
                        long fsize = fi.Length;

                        if (!parser.DisplayOnly)
                        {
                            if (parser.UseRecycleBin)
                                fi.MoveToRecycleBin();
                                //FileSystem.DeleteFile(file, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
                            else
                                try
                                {
                                    File.Delete(fi.FullName);
                                }
                                catch (PathTooLongException ex)
                                {
                                    // try again with long path routines
                                    fi.Delete();
                                }
                                catch (UnauthorizedAccessException ex)
                                {
                                    fi.Attributes =  ZetaLongPaths.Native.FileAttributes.Normal;
                                    fi.Delete();
                                }
                        }
                        OnShowMessage(Resources.Deleting + file);
                        FileCount++;

                        FileSizeCount += fsize;
                    }
                }
                catch(Exception ex)
                {
                    OnShowMessage(Resources.FailedToDelete + file);
                    LockedFileCount++;
                    success = false;
                }
            }

            if (parser.Recursive)
            {
                var folders = new ZetaLongPaths.ZlpDirectoryInfo(activeFolder);
                var dirs = folders.GetDirectories();
                foreach (var directory in dirs)
                {
                    string dir = directory.FullName;

                    success = ProcessFolder(dir, parser);
                    if (success && parser.RemoveEmptyFolders)
                    {
                        if (!directory.GetFiles().Any() && !directory.GetDirectories().Any())
                            try
                            {
                                if (!parser.DisplayOnly)
                                {
                                    if (parser.UseRecycleBin)
                                        directory.MoveToRecycleBin();
                                        //FileSystem.DeleteDirectory(dir, UIOption.OnlyErrorDialogs,
                                        //    RecycleOption.SendToRecycleBin);
                                    else
                                    {
                                        try
                                        {
                                            Directory.Delete(directory.FullName);
                                        }
                                        catch (PathTooLongException ex)
                                        {
                                            directory.Delete(false);
                                        }
                                        catch (UnauthorizedAccessException ex)
                                        {
                                            if (parser.DeleteReadOnly)
                                            {
                                                directory.Attributes = ZetaLongPaths.Native.FileAttributes.Normal;
                                                directory.Delete(false);
                                            }
                                        }
                                    }
                                }
                                FolderCount++;
                                OnShowMessage(Resources.DeletingDirectory + dir);
                            }
                            catch
                            {
                                OnShowMessage(Resources.FailedToDeleteDirectory + dir);
                            }
                    }
                }
            }

            return success;
        }