Exemple #1
0
        /// <summary> Currently only works when working with a physical file system for the target directory </summary>
        public static void ExtractIntoDir(this FileEntry self, DirectoryEntry targetDir)
        {
            if (targetDir.Exists)
            {
                throw new IOException("Target dir to extract zip into already exists: " + targetDir);
            }
            var fastZip = new FastZip();

            FastZip.ConfirmOverwriteDelegate confCallback = (fileName) => false;
            using (var s = self.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) {
                fastZip.ExtractZip(s, GetFullFileSystemPath(targetDir), FastZip.Overwrite.Prompt, confCallback, "", "", true, true);
            }
        }
Exemple #2
0
 public void ExtractZip(Stream inputStream, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime, bool isStreamOwner)
 {
     if (overwrite == FastZip.Overwrite.Prompt && confirmDelegate == null)
     {
         throw new ArgumentNullException("confirmDelegate");
     }
     this.continueRunning_          = true;
     this.overwrite_                = overwrite;
     this.confirmDelegate_          = confirmDelegate;
     this.extractNameTransform_     = new WindowsNameTransform(targetDirectory);
     this.fileFilter_               = new NameFilter(fileFilter);
     this.directoryFilter_          = new NameFilter(directoryFilter);
     this.restoreDateTimeOnExtract_ = restoreDateTime;
     using (this.zipFile_ = new ZipFile(inputStream))
     {
         if (this.password_ != null)
         {
             this.zipFile_.Password = this.password_;
         }
         this.zipFile_.IsStreamOwner = isStreamOwner;
         IEnumerator enumerator = this.zipFile_.GetEnumerator();
         while (this.continueRunning_ && enumerator.MoveNext())
         {
             ZipEntry zipEntry = (ZipEntry)enumerator.Current;
             if (zipEntry.IsFile)
             {
                 if (this.directoryFilter_.IsMatch(Path.GetDirectoryName(zipEntry.Name)) && this.fileFilter_.IsMatch(zipEntry.Name))
                 {
                     this.ExtractEntry(zipEntry);
                 }
             }
             else if (zipEntry.IsDirectory)
             {
                 if (this.directoryFilter_.IsMatch(zipEntry.Name) && this.CreateEmptyDirectories)
                 {
                     this.ExtractEntry(zipEntry);
                 }
             }
         }
     }
 }
Exemple #3
0
        void Run(string[] args)
        {
            bool     recurse           = false;
            string   arg1              = null;
            string   arg2              = null;
            string   fileFilter        = null;
            string   dirFilter         = null;
            bool     verbose           = false;
            bool     restoreDates      = false;
            bool     restoreAttributes = false;
            bool     progress          = false;
            TimeSpan interval          = TimeSpan.FromSeconds(1);

            bool createEmptyDirs = false;

            FastZip.Overwrite overwrite = FastZip.Overwrite.Always;
            FastZip.ConfirmOverwriteDelegate confirmOverwrite = null;

            Operation op       = Operation.Unknown;
            int       argCount = 0;

            for (int i = 0; i < args.Length; ++i)
            {
                if (args[i][0] == '-')
                {
                    string option = args[i].Substring(1).ToLower();
                    string optArg = "";

                    int parameterIndex = option.IndexOf('=');

                    if (parameterIndex >= 0)
                    {
                        if (parameterIndex < option.Length - 1)
                        {
                            optArg = option.Substring(parameterIndex + 1);
                        }
                        option = option.Substring(0, parameterIndex);
                    }

                    switch (option)
                    {
                    case "e":
                    case "empty":
                        createEmptyDirs = true;
                        break;

                    case "x":
                    case "extract":
                        if (op == Operation.Unknown)
                        {
                            op = Operation.Extract;
                        }
                        else
                        {
                            Console.WriteLine("Only one operation at a time is permitted");
                            op = Operation.Error;
                        }
                        break;

                    case "c":
                    case "create":
                        if (op == Operation.Unknown)
                        {
                            op = Operation.Create;
                        }
                        else
                        {
                            Console.WriteLine("Only one operation at a time is permitted");
                            op = Operation.Error;
                        }
                        break;

                    case "l":
                    case "list":
                        if (op == Operation.Unknown)
                        {
                            op = Operation.List;
                        }
                        else
                        {
                            Console.WriteLine("Only one operation at a time is permitted");
                            op = Operation.Error;
                        }
                        break;


                    case "p":
                    case "progress":
                        progress = true;
                        verbose  = true;
                        break;

                    case "r":
                    case "recurse":
                        recurse = true;
                        break;

                    case "v":
                    case "verbose":
                        verbose = true;
                        break;

                    case "i":
                        if (optArg.Length > 0)
                        {
                            interval = TimeSpan.FromSeconds(int.Parse(optArg));
                        }
                        break;

                    case "file":
                        if (NameFilter.IsValidFilterExpression(optArg))
                        {
                            fileFilter = optArg;
                        }
                        else
                        {
                            Console.WriteLine("File filter expression contains an invalid regular expression");
                            op = Operation.Error;
                        }
                        break;

                    case "dir":
                        if (NameFilter.IsValidFilterExpression(optArg))
                        {
                            dirFilter = optArg;
                        }
                        else
                        {
                            Console.WriteLine("Path filter expression contains an invalid regular expression");
                            op = Operation.Error;
                        }
                        break;

                    case "o":
                    case "overwrite":
                        switch (optArg)
                        {
                        case "always":
                            overwrite        = FastZip.Overwrite.Always;
                            confirmOverwrite = null;
                            break;

                        case "never":
                            overwrite        = FastZip.Overwrite.Never;
                            confirmOverwrite = null;
                            break;

                        case "prompt":
                            overwrite        = FastZip.Overwrite.Prompt;
                            confirmOverwrite = new FastZip.ConfirmOverwriteDelegate(ConfirmOverwrite);
                            break;

                        default:
                            Console.WriteLine("Invalid overwrite option");
                            op = Operation.Error;
                            break;
                        }
                        break;

                    case "oa":
                        restoreAttributes = true;
                        break;

                    case "od":
                        restoreDates = true;
                        break;

                    default:
                        Console.WriteLine("Unknown option {0}", args[i]);
                        op = Operation.Error;
                        break;
                    }
                }
                else if (arg1 == null)
                {
                    arg1 = args[i];
                    ++argCount;
                }
                else if (arg2 == null)
                {
                    arg2 = args[i];
                    ++argCount;
                }
            }

            FastZipEvents events = null;

            if (verbose)
            {
                events = new FastZipEvents();
                events.ProcessDirectory = new ProcessDirectoryHandler(ProcessDirectory);
                events.ProcessFile      = new ProcessFileHandler(ProcessFile);

                if (progress)
                {
                    events.Progress         = new ProgressHandler(ShowProgress);
                    events.ProgressInterval = interval;
                }
            }

            FastZip fastZip = new FastZip(events);

            fastZip.CreateEmptyDirectories     = createEmptyDirs;
            fastZip.RestoreAttributesOnExtract = restoreAttributes;
            fastZip.RestoreDateTimeOnExtract   = restoreDates;

            switch (op)
            {
            case Operation.Create:
                if (argCount == 2)
                {
                    Console.WriteLine("Creating Zip");

                    fastZip.CreateZip(arg1, arg2, recurse, fileFilter, dirFilter);
                }
                else
                {
                    Console.WriteLine("Invalid arguments");
                }
                break;

            case Operation.Extract:
                if (argCount == 2)
                {
                    Console.WriteLine("Extracting Zip");
                    fastZip.ExtractZip(arg1, arg2, overwrite, confirmOverwrite, fileFilter, dirFilter, restoreDates);
                }
                else
                {
                    Console.WriteLine("zipfile and target directory not specified");
                }
                break;

            case Operation.List:
                if (File.Exists(arg1))
                {
                    ListZipFile(arg1, fileFilter, dirFilter);
                }
                else if (Directory.Exists(arg1))
                {
                    ListFileSystem(arg1, recurse, fileFilter, dirFilter);
                }
                else
                {
                    Console.WriteLine("No valid list file or directory");
                }
                break;

            case Operation.Unknown:
                Console.WriteLine(
                    "FastZip v0.5\n"
                    + "  Usage: FastZip {options} operation args\n"
                    + "Operation Options: (only one permitted)\n"
                    + "  -x zipfile targetdir : Extract files from Zip\n"
                    + "  -c zipfile sourcedir : Create zip file\n"
                    + "  -l zipfile|dir       : List elements\n"
                    + "\n"
                    + "Behavioural options:\n"
                    + "  -dir={dirFilter}\n"
                    + "  -file={fileFilter}\n"
                    + "  -e Process empty directories\n"
                    + "  -i Progress interval in seconds\n"
                    + "  -p Show file progress\n"
                    + "  -r Recurse directories\n"
                    + "  -v Verbose output\n"
                    + "  -oa Restore file attributes on extract\n"
                    + "  -ot Restore file date time on extract\n"
                    + "  -overwrite=prompt|always|never   : Overwrite on extract handling\n"
                    );
                break;

            case Operation.Error:
                // Do nothing for now...
                break;
            }
        }
        void Run(string[] args)
        {
            bool recurse = false;
            string arg1 = null;
            string arg2 = null;
            string fileFilter = null;
            string dirFilter = null;
            bool verbose = false;
            bool restoreDates = false;
            bool restoreAttributes = false;
            bool progress = false;
            TimeSpan interval = TimeSpan.FromSeconds(1);

            bool createEmptyDirs = false;
            FastZip.Overwrite overwrite = FastZip.Overwrite.Always;
            FastZip.ConfirmOverwriteDelegate confirmOverwrite = null;
			
            Operation op = Operation.Unknown;
            int argCount = 0;
			
            for ( int i = 0; i < args.Length; ++i ) {
                if ( args[i][0] == '-' ) {
                    string option = args[i].Substring(1).ToLower();
                    string optArg = "";
	
                    int parameterIndex = option.IndexOf('=');
	
                    if (parameterIndex >= 0)
                    {
                        if (parameterIndex < option.Length - 1) {
                            optArg = option.Substring(parameterIndex + 1);
                        }
                        option = option.Substring(0, parameterIndex);
                    }
					
                    switch ( option ) {
                        case "e":
                        case "empty":
                            createEmptyDirs = true;
                            break;
							
                        case "x":
                        case "extract":
                            if ( op == Operation.Unknown ) {
                                op = Operation.Extract;
                            }
                            else {
                                Console.WriteLine("Only one operation at a time is permitted");
                                op = Operation.Error;
                            }
                            break;
							
                        case "c":
                        case "create":
                            if ( op == Operation.Unknown ) {
                                op = Operation.Create;
                            }
                            else {
                                Console.WriteLine("Only one operation at a time is permitted");
                                op = Operation.Error;
                            }
                            break;

                        case "l":
                        case "list":
                            if ( op == Operation.Unknown ) {
                                op = Operation.List;
                            }
                            else {
                                Console.WriteLine("Only one operation at a time is permitted");
                                op = Operation.Error;
                            }
                            break;

							
                        case "p":
                        case "progress":
                            progress = true;
                            verbose = true;
                            break;

                        case "r":
                        case "recurse":
                            recurse = true;
                            break;
							
                        case "v":
                        case "verbose":
                            verbose = true;
                            break;

                        case "i":
                            if (optArg.Length > 0) {
                                interval = TimeSpan.FromSeconds(int.Parse(optArg));
                            }
                            break;

                        case "file":
                            if ( NameFilter.IsValidFilterExpression(optArg) ) {
                                fileFilter = optArg;
                            }
                            else {
                                Console.WriteLine("File filter expression contains an invalid regular expression");
                                op = Operation.Error;
                            }
                            break;
							
                        case "dir":
                            if ( NameFilter.IsValidFilterExpression(optArg) ) {
                                dirFilter = optArg;
                            }
                            else {
                                Console.WriteLine("Path filter expression contains an invalid regular expression");
                                op = Operation.Error;
                            }
                            break;
							
                        case "o":
                        case "overwrite":
                            switch ( optArg )
                            {
                                case "always":
                                    overwrite = FastZip.Overwrite.Always;
                                    confirmOverwrite = null;
                                    break;
									
                                case "never":
                                    overwrite = FastZip.Overwrite.Never;
                                    confirmOverwrite = null;
                                    break;
									
                                case "prompt":
                                    overwrite = FastZip.Overwrite.Prompt;
                                    confirmOverwrite = new FastZip.ConfirmOverwriteDelegate(ConfirmOverwrite);
                                    break;
									
                                default:
                                    Console.WriteLine("Invalid overwrite option");
                                    op = Operation.Error;
                                    break;
                            }
                            break;
							
                        case "oa":
                            restoreAttributes = true;
                            break;
							
                        case "od":
                            restoreDates = true;
                            break;
							
                        default:
                            Console.WriteLine("Unknown option {0}", args[i]);
                            op = Operation.Error;
                            break;
                    }
                }
                else if ( arg1 == null ) {
                    arg1 = args[i];
                    ++argCount;
                }
                else if ( arg2 == null ) {
                    arg2 = args[i];
                    ++argCount;
                }
            }

            FastZipEvents events = null;
			
            if ( verbose ) {
                events = new FastZipEvents();
                events.ProcessDirectory = new ProcessDirectoryHandler(ProcessDirectory);
                events.ProcessFile = new ProcessFileHandler(ProcessFile);

                if (progress)
                {
                    events.Progress = new ProgressHandler(ShowProgress);
                    events.ProgressInterval = interval;
                }
            }
			
            FastZip fastZip = new FastZip(events);
            fastZip.CreateEmptyDirectories = createEmptyDirs;
            fastZip.RestoreAttributesOnExtract = restoreAttributes;
            fastZip.RestoreDateTimeOnExtract = restoreDates;
			
            switch ( op ) {
                case Operation.Create:
                    if ( argCount == 2 ) {
                        Console.WriteLine("Creating Zip");

                        fastZip.CreateZip(arg1, arg2, recurse, fileFilter, dirFilter);
                    }
                    else
                        Console.WriteLine("Invalid arguments");
                    break;
					
                case Operation.Extract:
                    if ( argCount == 2 ) {
                        Console.WriteLine("Extracting Zip");
                        fastZip.ExtractZip(arg1, arg2, overwrite, confirmOverwrite, fileFilter, dirFilter, restoreDates);
                    }
                    else
                        Console.WriteLine("zipfile and target directory not specified");
                    break;
					
                case Operation.List:
                    if ( File.Exists(arg1) ) {
                        ListZipFile(arg1, fileFilter, dirFilter);
                    }
                    else if ( Directory.Exists(arg1) ) {
                        ListFileSystem(arg1, recurse, fileFilter, dirFilter);
                    }
                    else {
                        Console.WriteLine("No valid list file or directory");
                    }
                    break;
					
                case Operation.Unknown:
                    Console.WriteLine(
                        "FastZip v0.5\n"
                        +  "  Usage: FastZip {options} operation args\n"
                        +  "Operation Options: (only one permitted)\n"
                        +  "  -x zipfile targetdir : Extract files from Zip\n"
                        +  "  -c zipfile sourcedir : Create zip file\n"
                        +  "  -l zipfile|dir       : List elements\n"
                        +  "\n"
                        +  "Behavioural options:\n"
                        +  "  -dir={dirFilter}\n"
                        +  "  -file={fileFilter}\n"
                        +  "  -e Process empty directories\n"
                        +  "  -i Progress interval in seconds\n"
                        +  "  -p Show file progress\n"
                        +  "  -r Recurse directories\n"
                        +  "  -v Verbose output\n"
                        +  "  -oa Restore file attributes on extract\n"
                        +  "  -ot Restore file date time on extract\n"
                        +  "  -overwrite=prompt|always|never   : Overwrite on extract handling\n"
                        );
                    break;
				
                case Operation.Error:
                    // Do nothing for now...
                    break;
            }
        }
Exemple #5
0
        private static async Task DownloadAndExtractPackage(string download_url, string download_to, string extract_basedir, FastZip.ConfirmOverwriteDelegate confirmOverwrite, CancellationToken ct)
        {
            StatusText(string.Format("Downloading from {0}", download_url));
            Directory.CreateDirectory(UpdatesDir);
            await DownloadFileWithProgress(download_url, download_to, ct);

            StatusText(string.Format("Extracting package {0}", Path.GetFileName(download_to)));
            await Task.Run(() =>
            {
                var fz = new FastZip();
                fz.ExtractZip(download_to, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, extract_basedir), FastZip.Overwrite.Prompt, confirmOverwrite, "", "", true);
                File.Delete(download_to);
            });
        }
Exemple #6
0
 public void ExtractZip(string zipFileName, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime)
 {
     if (overwrite == FastZip.Overwrite.Prompt && confirmDelegate == null)
     {
         throw new ArgumentNullException("confirmDelegate");
     }
     this.continueRunning_          = true;
     this.overwrite_                = overwrite;
     this.confirmDelegate_          = confirmDelegate;
     this.targetDirectory_          = targetDirectory;
     this.fileFilter_               = new NameFilter(fileFilter);
     this.directoryFilter_          = new NameFilter(directoryFilter);
     this.restoreDateTimeOnExtract_ = restoreDateTime;
     using (this.inputStream_ = new ZipInputStream(File.OpenRead(zipFileName)))
     {
         if (this.password_ != null)
         {
             this.inputStream_.Password = this.password_;
         }
         ZipEntry nextEntry;
         while (this.continueRunning_ && (nextEntry = this.inputStream_.GetNextEntry()) != null)
         {
             if (this.directoryFilter_.IsMatch(Path.GetDirectoryName(nextEntry.Name)) && this.fileFilter_.IsMatch(nextEntry.Name))
             {
                 this.ExtractEntry(nextEntry);
             }
         }
     }
 }
Exemple #7
0
        // Token: 0x060008E3 RID: 2275 RVA: 0x000328FC File Offset: 0x00030AFC
        public void ExtractZip(string zipFileName, string targetDirectory, FastZip.Overwrite overwrite, FastZip.ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime)
        {
            Stream inputStream = File.Open(zipFileName, FileMode.Open, FileAccess.Read, FileShare.Read);

            this.ExtractZip(inputStream, targetDirectory, overwrite, confirmDelegate, fileFilter, directoryFilter, restoreDateTime, true);
        }
Exemple #8
0
        internal static void ExtractZipContent(Form1 form1, ZipExtract form, String fileNameAndPath, bool isPasswordProtected)
        {
            ToolStripStatusLabel toolStripStatusLabel   = form1.toolStripStatusLabel;
            ToolStripProgressBar toolStripProgressBar   = form1.toolStripProgressBar;
            DataGridView         zipContentDataGridView = form.zipContentDataGridView;

            try
            {
                FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog
                {
                    Description  = LanguageUtil.GetCurrentLanguageString("folderBrowserDialogDescription", className),
                    RootFolder   = Environment.SpecialFolder.Desktop,
                    SelectedPath = FileUtil.GetInitialFolder(form1)
                };

                if (folderBrowserDialog.ShowDialog(form) != DialogResult.OK)
                {
                    return;
                }

                toolStripProgressBar.Value   = 0;
                toolStripProgressBar.Visible = true;
                toolStripProgressBar.PerformStep();

                String selectedFilesRegExpression = SerializeSelectedFilesToExport(zipContentDataGridView.SelectedRows);
                toolStripProgressBar.PerformStep();

                FastZip zipFile = new FastZip();

                if (isPasswordProtected)
                {
                    WindowManager.ShowNameEntry(form);

                    if (String.IsNullOrEmpty(form.newObjectName))
                    {
                        toolStripProgressBar.Visible = false;
                        return;
                    }

                    ZipFile testZip = null;
                    bool    testResult;
                    try
                    {
                        testZip = new ZipFile(fileNameAndPath)
                        {
                            Password = form.newObjectName
                        };
                        testResult = testZip.TestArchive(true, TestStrategy.FindFirstError, form1.Zip_Errors);
                    }
                    finally
                    {
                        if (testZip != null)
                        {
                            testZip.Close();
                        }
                    }

                    if (!testResult)
                    {
                        toolStripProgressBar.Visible = false;
                        return;
                    }

                    zipFile.Password = form.newObjectName;
                }

                toolStripProgressBar.PerformStep();

                FastZip.ConfirmOverwriteDelegate overDelegate = (PromptOverwrite);
                zipFile.ExtractZip(fileNameAndPath, folderBrowserDialog.SelectedPath, FastZip.Overwrite.Prompt, overDelegate, selectedFilesRegExpression, String.Empty, true);

                toolStripProgressBar.PerformStep();

                toolStripProgressBar.Visible = false;
                String success = LanguageUtil.GetCurrentLanguageString("ExtractSuccess", className);
                toolStripStatusLabel.Text = success;
                WindowManager.ShowInfoBox(form, success);
            }
            catch (Exception exception)
            {
                toolStripProgressBar.Visible = false;
                WindowManager.ShowErrorBox(form, exception.Message, exception);
            }
        }