通过Winzip及其cmd扩展名在C#中解压缩文件

本文关键字:解压缩 文件 扩展名 Winzip 及其 cmd 通过 | 更新日期: 2023-09-27 18:20:49

所以我有一小段代码,可以检测文件夹中的文件,并在它们达到一定年龄后系统地压缩它们。我现在正在编写一段代码,根据用户的要求解压缩某个日期范围的文件,以便在软件中使用。

我的问题是,zip文件的命令行字符串工作得很好,但解压缩不。。。以下是我如何解压缩的代码摘录,请让我知道我应该做些什么来确保解压缩。谢谢

private void UnZipFile()
        {
            if (myRecord == null)
            {
                if (File.Exists(zipInfo.FullName))
                {                        
                    Process LogUnzipper = new Process();
                    //32-bit system
                    if (File.Exists("c:''Program Files''WinZip''WZZIP.exe"))
                    {
                        //WZZIP.exe being the WinZip executable
                        LogUnzipper.StartInfo.FileName = "c:''Program Files''WinZip''WZZIP.exe";
                    }
                    //64-bit system
                    else if (File.Exists("c:''Program Files (x86)''WinZip''WZZIP.exe"))
                    {
                        //WZZIP.exe being the WinZip executable
                        LogUnzipper.StartInfo.FileName = "c:''Program Files (x86)''WinZip''WZZIP.exe";
                    }
                    //here is where I think I'm screwing up something..
                    string action = "-e " + "'"" + zipInfo.FullName + "'"" + " '"" + zipInfo.DirectoryName + "'"";
                    //happen in background
                    LogUnzipper.StartInfo.CreateNoWindow = true;
                    LogUnzipper.StartInfo.UseShellExecute = false;
                    LogUnzipper.StartInfo.Arguments = action;
                    LogUnzipper.Start();
                    while (!LogUnzipper.HasExited)
                    {
                        LogUnzipper.WaitForExit(500);// 1/2 sec
                    }
                    //adding break point at this line yields no unzipped Log file :(
                }
                ...

我的想法是,我不知何故在string action中调用了cmd错误?即使我在windows命令提示符下测试它,它的格式也是正确的。

***需要注意的是,ZipInfo.FullName是一个类似于formmat的例子:"C:''Users''16208''Software''Beta''logs''6_2013''Log_10AM_to_11AM.zip",所以我给出了一个精确的压缩项目路径。

通过Winzip及其cmd扩展名在C#中解压缩文件

您可以使用一些免费的开源.Net库进行压缩和解压缩(正如SLaks所建议的那样)。例如DotNetZip。

    using (ZipFile decompress = ZipFile.Read(ZipFilePath))
    {    
        foreach (ZipEntry e in decompress)
        {
            e.Extract(TargetPath, ExtractExistingFileAction.OverwriteSilently);
        }
    }

至于您的代码,等待半秒钟可能不足以完成解压缩。您还可以尝试在命令行中运行unzip命令并检查输出。

如果您安装了WinZip,请尝试以下操作:

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", @"/c start winzip32 -e " + fileName + @" C:'SomeDirectory");
rocStartInfo.UseShellExecute = false;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();

其中fileName是指向*.rar文件的完整路径。