0

我正在尝试创建程序来解压缩文件。我需要使用 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);

也许你知道,在 C# 中执行 .bat 文件的最佳方式。

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

4

4 回答 4

0

Quotes go aroundthe entire path incl drive letter "c:\some folder\some file.zip"


To unzip

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"

and to zip

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"

and create a blank 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
于 2014-08-02T22:00:50.790 回答
0

如果您想执行任何事情,您可以使用带有ProcessStartInfo.Arguments的流程类

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

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

于 2014-08-02T23:11:44.087 回答
0

很抱歉添加为答案(我目前没有足够的代表发表评论),但希望这会有所帮助。

你需要使用winzip命令行的原因是什么?您能否改用 ionic zip(http://dotnetzip.codeplex.com/ - 也可通过 Visual Studio 中的 NuGet 获得)。我用它来压缩文件几次,我知道它也能解压缩。

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

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

编辑:这里有一个类似的 SO 帖子:unzip file in C# via Winzip and its cmd extension

于 2014-08-02T22:27:40.977 回答
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();
于 2015-01-29T13:33:07.217 回答