Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用c#解压MSZIP文件?_C#_C# 4.0_Cab - Fatal编程技术网

如何用c#解压MSZIP文件?

如何用c#解压MSZIP文件?,c#,c#-4.0,cab,C#,C# 4.0,Cab,我有一个VB6应用程序的安装程序,我需要使用c.单独解压缩文件。所有文件都以下划线结尾,例如image.jp。我看到7ZIP程序使用MSZIP压缩模式压缩文件,但我无法解压缩 编辑 我的解决方案 基于的使用,我使用DLL中的说明: Microsoft.Deployment.Compression.dll Microsoft.Deployment.Compression.Cab.dll 然后,我没有使用CAB文件,而是将我的文件image.jp放在这里,它工作得非常好。 谢谢你们所有人问我这个问

我有一个VB6应用程序的安装程序,我需要使用
c.
单独解压缩文件。所有文件都以下划线结尾,例如
image.jp
。我看到7ZIP程序使用MSZIP压缩模式压缩文件,但我无法解压缩

编辑

我的解决方案

基于的使用,我使用DLL中的说明:

Microsoft.Deployment.Compression.dll

Microsoft.Deployment.Compression.Cab.dll

然后,我没有使用CAB文件,而是将我的文件
image.jp
放在这里,它工作得非常好。 谢谢你们所有人问我这个问题,查理,我喜欢说谢谢

CabInfo cab = new CabInfo(@"C:\test\image.jp_");
cab.Unpack(@"C:\test\");

谢谢

一种可能是导入cabinet.dll或SetupApi.dll库,并使用
extern
调用调用其中的方法。讨论了该方法

您需要这样的原型:

不过,本文并没有具体讨论MSZIP通缩


另一种可能是使用7Z SDK,如本文所述。

这个问题背后有很多有趣的历史。很久很久以前,在一个遥远的星系里,微软被抓到手放在饼干罐里。当他们还是一家以销售DOS许可证为生的小公司时。一家名为Stac Electronics的公司想出了一种让DOS更好工作的方法。很多机会,磁盘驱动器仍然非常慢,处理器也越来越快

Stac提出了一个DOS实用程序,可以自动压缩文件,而DOS不知道发生了这种情况。在写入磁盘之前对其进行压缩,在读取时对其进行解压缩。DOS只能看到文件的未压缩版本。当时非常流行,它使磁盘访问变得更容易、更快

所以微软说“好主意!我们也能做到”。他们自己制作了一个名为DoubleSpace的版本,并在DOS版本6.0中将其发布到世界各地。Stac并不激动,他们被起诉的理由马上就死了,并起诉了微软。而且赢了$1.2亿美元。那很痛。很多这相当于在已经售出的每一份DOS上加上5.50美元的附加费,而微软当时已经非常重视确保每台电脑都预装了DOS,从而使价格具有吸引力

微软很难从中恢复过来,在很长一段时间里,压缩在公司里是一个肮脏的词。例如,在.NET framework中非常明显,直到最近,对.zip存档的支持一直缺失

长话短说,他们提出了自己的压缩方案,一个没有侵犯任何人专利的方案。剩下的不多了,它吸得很厉害。这就是你遇到的,MSZIP不是合适的标签。您必须运行一个名为expand.exe的程序来解压缩该文件,该程序适用于所有Windows版本。键入“展开/?”以获取帮助。在superuser.com(应@Stijn的请求)上询问更多关于它的问题

我的解决方案

基于的使用,我使用DLL中的说明:

Microsoft.Deployment.Compression.dll Microsoft.Deployment.Compression.Cab.dll

然后,我没有使用CAB文件,而是将我的文件image.jp_uu放入其中,它工作得非常好。谢谢大家给我这个问题

CabInfo cab = new CabInfo(@"C:\test\image.jp_");
cab.Unpack(@"C:\test\");
在我的例子中,我发现做起来非常简单,我已经为另一个项目安装了WiX,但是您可以非常简单地下载和安装

然后,您只需转到安装文件夹或找到这些DLL并进行复制,以便在我们的应用程序中使用

所有其他解决方案“ZIP”或“GZip”或基于此的库都不起作用。如果有人有其他的解决方案。NET4.0将非常受欢迎


谢谢

你怎么会有7000个名声,却不知道什么是允许的,什么是不允许的?@ColeJohnson这就是你降低分数的原因,你完全错了也许Andres在另一个领域有经验。例如,他可能是Linux上的Java程序员专家。注意不要对问题做出判断。我投反对票,因为你的问题是问代码。这是不允许的。此外,他们是我的选票。我不同意,我认为他要求的不是一个完整的解决方案,而是一种方法。至少我可以用两种方式来解释他的问题。这对我来说也不是小事。除了手动调用cabarc.exe之外,我不确定如何使用.NET以编程方式解压缩Microsoft Cabinet文件。+1,但我非常确定它发生在这个galaxy.tl;dr:您必须运行一个名为expand.exe的程序来解压缩该文件,该程序在每个Windows版本上都可用。就在“制作自己的版本,称为DoubleSpace”之前,Microsoft与Stac讨论了许可Stac的实用程序。在这次讨论中,微软检查了Stac的代码。斯塔克起诉并不奇怪。
CabInfo cab = new CabInfo(@"C:\test\image.jp_");
cab.Unpack(@"C:\test\");