部分代码如下:
public void UnzipFiles(string SourceZip, string DesPath, bool cover)
{
ZipInputStream stream = new ZipInputStream(File.OpenRead(SourceZip));
ZipEntry theEntry;
if (!Directory.Exists(DesPath))
Directory.CreateDirectory(DesPath);
if (DesPath[DesPath.Length - 1] != Path.DirectorySeparatorChar)
DesPath += Path.DirectorySeparatorChar;
while ((theEntry = stream.GetNextEntry()) != null)
{
。。。
}
}
红色部分抛出异常:Wrong Local header signature: 0x905A4D
我想这是因为解压的文件是EXE,而非ZIP导致的,但如何解决呢?
15 个解决方案
#1
#2
直接把EXE改成ZIP,呵呵,不知道行不行
#3
那是exe呀,不是zip压缩格式。
#5
这个方法我也想到了,不行的,直接用winzip都打不开
#6
是EXE,但是一个安装包,可以手动用winzip/winrar解压的。
#7
EXE压缩的格式不是zip,算法不同。。。
#8
那是打包出来的自解压格式,winzip和winrar可以识别这种exe的内容,只解压出来数据,跳过exe本身的数据。
你可以研究一下这种exe的格式数据,然后也跳过exe的数据直接解压缩内容。
你可以搜索一下7z开源的压缩解压缩,也有这个功能。
#9
up
#10
lz说的是winrar制作的自解压文件或者是用windows自带的iexpress打包cab的exe吧 这两种exe可以拿winrar打开
#11
//第一个参数是可执行文件路径和文件名,第二个是参数比如:-o c:\extract ...
private void RunCmd(string ExeName, string Args) {
Process p = new Process();
p.StartInfo.FileName = ExeName;
p.StartInfo.Arguments = Args;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
//后台执行。
p.StartInfo.CreateNoWindow = true;
p.Start();
}
#12
8楼说的有道理。
#13
关注!!!!!!!!!!!!!!!!!!!!!
#14
如果exe文件是rar的自解压:
在exe文件中搜索 “ Rar!”字符串,从“Rar!”开始到文件结束的文件都是rar的压缩包内容。前面的都是自解压模块。
所以,把从“Rar!”开始到文件结束的内容全部拷贝到另外一个临时文件里,然后对临时文件进行操作就OK了。
如果exe文件是rar的自解压:
只要只要搜索“ PK ?”即可。( ?不确定此字符。)
注:“Rar!” “PK?”最好自己用16进制打开rar、zip压缩包看看,前面那几个字符到底对应的是哪几个编码。因为我是直接用记事本打开看的。
在exe文件中搜索 “ Rar!”字符串,从“Rar!”开始到文件结束的文件都是rar的压缩包内容。前面的都是自解压模块。
所以,把从“Rar!”开始到文件结束的内容全部拷贝到另外一个临时文件里,然后对临时文件进行操作就OK了。
如果exe文件是rar的自解压:
只要只要搜索“ PK ?”即可。( ?不确定此字符。)
注:“Rar!” “PK?”最好自己用16进制打开rar、zip压缩包看看,前面那几个字符到底对应的是哪几个编码。因为我是直接用记事本打开看的。
#15
EXE是由installshield打包的,由于时间有限,没有太多时间去研究,再加上这个只是一个公司内部使用的工具,所以直接用process启动WINRAR.exe进行解压。谢谢大家的解答,现在结贴,散分:)
#1
#2
直接把EXE改成ZIP,呵呵,不知道行不行
#3
那是exe呀,不是zip压缩格式。
#4
#5
这个方法我也想到了,不行的,直接用winzip都打不开
#6
是EXE,但是一个安装包,可以手动用winzip/winrar解压的。
#7
EXE压缩的格式不是zip,算法不同。。。
#8
那是打包出来的自解压格式,winzip和winrar可以识别这种exe的内容,只解压出来数据,跳过exe本身的数据。
你可以研究一下这种exe的格式数据,然后也跳过exe的数据直接解压缩内容。
你可以搜索一下7z开源的压缩解压缩,也有这个功能。
#9
up
#10
lz说的是winrar制作的自解压文件或者是用windows自带的iexpress打包cab的exe吧 这两种exe可以拿winrar打开
#11
//第一个参数是可执行文件路径和文件名,第二个是参数比如:-o c:\extract ...
private void RunCmd(string ExeName, string Args) {
Process p = new Process();
p.StartInfo.FileName = ExeName;
p.StartInfo.Arguments = Args;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
//后台执行。
p.StartInfo.CreateNoWindow = true;
p.Start();
}
#12
8楼说的有道理。
#13
关注!!!!!!!!!!!!!!!!!!!!!
#14
如果exe文件是rar的自解压:
在exe文件中搜索 “ Rar!”字符串,从“Rar!”开始到文件结束的文件都是rar的压缩包内容。前面的都是自解压模块。
所以,把从“Rar!”开始到文件结束的内容全部拷贝到另外一个临时文件里,然后对临时文件进行操作就OK了。
如果exe文件是rar的自解压:
只要只要搜索“ PK ?”即可。( ?不确定此字符。)
注:“Rar!” “PK?”最好自己用16进制打开rar、zip压缩包看看,前面那几个字符到底对应的是哪几个编码。因为我是直接用记事本打开看的。
在exe文件中搜索 “ Rar!”字符串,从“Rar!”开始到文件结束的文件都是rar的压缩包内容。前面的都是自解压模块。
所以,把从“Rar!”开始到文件结束的内容全部拷贝到另外一个临时文件里,然后对临时文件进行操作就OK了。
如果exe文件是rar的自解压:
只要只要搜索“ PK ?”即可。( ?不确定此字符。)
注:“Rar!” “PK?”最好自己用16进制打开rar、zip压缩包看看,前面那几个字符到底对应的是哪几个编码。因为我是直接用记事本打开看的。
#15
EXE是由installshield打包的,由于时间有限,没有太多时间去研究,再加上这个只是一个公司内部使用的工具,所以直接用process启动WINRAR.exe进行解压。谢谢大家的解答,现在结贴,散分:)