在C#中解压缩文件(使用winzip命令行)

时间:2014-08-02 21:51:03

标签: c# .net batch-file winzip

我正在尝试创建解压缩文件的程序。我需要使用winzip命令行。我尝试将参数命令发送到cmd,但它不起作用,因为cmd不知道我的命令。当我手动粘贴命令时,它可以工作。

var process = new ProcessStartInfo("cmd.exe");
var command = "/c WZUNZIP -spassword" + "\""+ "C:\my path\file.zip" + "\"" + " " + "\"" + "C:\my path" + "\"";
process.UseShellExecute = false;
process.Arguments = command;
Process.Start(process);

我尝试创建.bat文件并在我的程序中执行此文件,但是在它不起作用之前,当我在我的程序中执行它并且在手动启动时它可以工作。

start cmd.exe /c WZUNZIP -spassword "C:\my path\file.zip" "C:\my path"
var process = new ProcessStartInfo("cmd.exe", pathToBatch);
Process.Start(process);

Mayby你知道,在C#中执行.bat文件的最佳方法。

我需要使用winzip,因为它只为我的文件提供编码。我尝试使用DotNetZip并在uziping程序期间抛出异常,它无法解压缩,因为库无法操作此文件。

4 个答案:

答案 0 :(得分:0)

报价围绕整个路径,包括驱动器号"c:\some folder\some file.zip"


解压缩

Set objShell = CreateObject("Shell.Application")
Set Ag=Wscript.Arguments
set WshShell = WScript.CreateObject("WScript.Shell")

Set DestFldr=objShell.NameSpace(Ag(1))
Set SrcFldr=objShell.NameSpace(Ag(0))
Set FldrItems=SrcFldr.Items
DestFldr.CopyHere FldrItems, &H214
Msgbox "Finished"

和压缩

Set objShell = CreateObject("Shell.Application")
Set Ag=Wscript.Arguments
set WshShell = WScript.CreateObject("WScript.Shell")

Set SrcFldr=objShell.NameSpace(Ag(1))
Set DestFldr=objShell.NameSpace(Ag(0))
Set FldrItems=SrcFldr.Items
DestFldr.CopyHere FldrItems, &H214
Msgbox "Finished"

并创建一个空白的zip。

Set Ag=Wscript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(Ag(0), 8, vbtrue)
BlankZip = "PK" & Chr(5) & Chr(6)
For x = 0 to 17
    BlankZip = BlankZip & Chr(0)
Next
ts.Write BlankZip

答案 1 :(得分:0)

道歉添加作为答案(我当然没有足够的代表发布评论),但希望这会有所帮助。

您需要使用winzip命令行的原因是什么?你可以使用离子拉链(http://dotnetzip.codeplex.com/ - 也可以通过Visual Studio中的NuGet获得)。我已经用了几次来压缩文件,我也知道它也会解压缩。

我可以看到不使用winzip命令行的好处是,在解压缩过程中,您没有在屏幕上弹出命令提示符窗口。

否则,正如Noodles建议的那样,引号必须围绕整个路径,而不仅仅是包含空格的文件夹。

编辑:此处有类似的SO帖子:unzip file in C# via Winzip and its cmd extension

答案 2 :(得分:0)

如果您想执行任何操作,可以将流程类 ProcessStartInfo.Arguments 一起使用。

您可以在以下位置查看更多信息:

我的问题是因为我不明白你想要什么, 为什么不使用 system.IO.Compression SharpzipLib ?您可以查看更多信息并使用金块下载。

答案 3 :(得分:0)

这对我有用:

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", @"/c  WZUNZIP.EXE -ye -o " + zipPath + " " + ExtractedFilesLocation);
            procStartInfo.UseShellExecute = false;
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            proc.Start();
            proc.WaitForExit();