如何利用shell对.zip文件进行解压缩

C#解压.zip文件的方式有很多种,一般情况下,如果项目里面没有特别要求,可以使用SharpZipLib进行解压缩,当然,压缩也是没问题的。但如果项目要求不能使用开源库,那就只能say sorry了。
其实,windows的explorer就能够直接做到解压.zip文件的功能,既然有这种功能,那么肯定有对应的API来进行调用。

系统函数是:

Folder .CopyHere( vItem   [ ,   vOptions ] )
具体使用如下:
1. 添加引用 Shell32.dll,可以在Windows/system32中找到它。
2. 添加方法,搞定。

static void UnZip(string zipFile, string destFolder) { Shell32.ShellClass sc = new Shell32.ShellClass(); Shell32.Folder SrcFolder = sc.NameSpace(zipFile); Shell32.Folder DestFolder = sc.NameSpace(destFolder); Shell32.FolderItems items = SrcFolder.Items(); DestFolder.CopyHere(items, 20); }

上面的Folder与FolderItem均为COM对象,所以,在C#中,不需要添加Shell32.dll也能够直接使用,通过Type.GetTypeFromCLSID方法就能够得到相关的Folder类型。我自己也封装了一下,代码如下:

static bool UnZipFile(string strSrcZipFile, string strUnZipFolder) { // Check the zip file is exist or the file is not a zip file if (!File.Exists(strSrcZipFile) || ".zip" != Path.GetExtension(strSrcZipFile).ToLower()) { return false; } // Check the folder is exist, if not, create it if ( !Directory.Exists(strUnZipFolder) ) { try { Directory.CreateDirectory(strUnZipFolder); } catch (System.Exception ex) { return false; } finally { } } // Create Shell Application instance Type shellType = Type.GetTypeFromProgID("Shell.Application"); object shellObject = System.Activator.CreateInstance(shellType); object objSrcFile = shellType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shellObject, new object[] { strSrcZipFile }); object objDestFolder = shellType.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shellObject, new object[] { strUnZipFolder }); Type FolderType = Type.GetTypeFromCLSID(new Guid("BBCBDE60-C3FF-11CE-8350-444553540000")); object items = FolderType.InvokeMember("Items", System.Reflection.BindingFlags.InvokeMethod, null, objSrcFile, null); FolderType.InvokeMember("CopyHere", System.Reflection.BindingFlags.InvokeMethod, null, objDestFolder, new object[] { items, 20 }); return true; }

C++的实现方式不知道怎么搞,谁要是知道,请告诉一下哈。

你可能感兴趣的:(String,shell,object,File,null,application)