作者: 乔克斯
查看: 8412|回复: 12
打印 上一主题 下一主题

[源码] 【Rar压缩解压类库】C#为数不多的支持Net2.0的Rar操作类库

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2016-5-19 18:53:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
查看: 8412|回复: 12
说明:
最近用net 2.0开发萝莉云,遇到个问题。下载下来的字幕rar文件。无法解压!不管是DotNetZip还是ICSharpCode.SharpZipLib 都无法解压rar!我凑,不科学。然后找来找去。终于找到这个支持2.0,且支持rar的方法。需要可以拿去。案例demo还没写。不过有调用代码。

目录截图:


调用代码:
[C#] 纯文本查看 复制代码
        #region 7zZip压缩、解压方法
        /// <summary>
        /// 压缩文件 
        /// </summary>
        /// <param name="objectPathName">压缩对象(即可以是文件夹|也可以是文件)</param>
        /// <param name="objectZipPathName">保存压缩文件的路径</param>
        /// <param name="strPassword">加密码</param>
        /// 测试压缩文件夹:压缩文件(objectZipPathName)不能放在被压缩文件(objectPathName)内,否则报“文件夹被另一进程使用中”错误。
        /// <returns></returns>
        public CompressResults Compress7zZip(String objectPathName, String objectZipPathName, String strPassword) {
            try {
                //http://sevenzipsharp.codeplex.com/releases/view/51254 下载sevenzipsharp.dll
                //SevenZipSharp.dll、zLib1.dll、7z.dll必须同时存在,否则常报“加载7z.dll错误”
                string libPath = Application.StartupPath + @"\7z.dll";
                SevenZip.SevenZipCompressor.SetLibraryPath(libPath);
                SevenZip.SevenZipCompressor sevenZipCompressor = new SevenZip.SevenZipCompressor();
                sevenZipCompressor.CompressionLevel = SevenZip.CompressionLevel.Fast;
                sevenZipCompressor.ArchiveFormat = SevenZip.OutArchiveFormat.Zip;

                //被压缩对象是否存在
                int beforeObjectNameIndex = objectPathName.LastIndexOf('\\');
                string objectPath = objectPathName.Substring(0, beforeObjectNameIndex);
                //System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(objectPathName);
                if (Directory.Exists(objectPathName)/*directoryInfo.Exists*/ == false && System.IO.File.Exists(objectPathName) == false) {
                    return CompressResults.SourceObjectNotExist;
                }
                int beforeObjectRarNameIndex = objectZipPathName.LastIndexOf('\\');
                int objectRarNameIndex = beforeObjectRarNameIndex + 1;
                //string objectZipName = objectZipPathName.Substring(objectRarNameIndex);
                string objectZipPath = objectZipPathName.Substring(0, beforeObjectRarNameIndex);
                //目标目录、文件是否存在
                if (System.IO.Directory.Exists(objectZipPath) == false) {
                    System.IO.Directory.CreateDirectory(objectZipPath);
                } else if (System.IO.File.Exists(objectZipPathName) == true) {
                    System.IO.File.Delete(objectZipPathName);
                }

                if (Directory.Exists(objectPathName))       //压缩对象是文件夹
                {
                    if (String.IsNullOrEmpty(strPassword)) {
                        sevenZipCompressor.CompressDirectory(objectPathName, objectZipPathName);
                    } else {
                        sevenZipCompressor.CompressDirectory(objectPathName, objectZipPathName, strPassword);
                    }
                } else        //压缩对象是文件 无加密方式
                {
                    sevenZipCompressor.CompressFiles(objectZipPathName, objectPathName);
                }

                return CompressResults.Success;
            } catch (Exception ex) {
                MessageBox.Show("压缩文件失败!" + ex.Message);
                return CompressResults.UnKnown;
            }
        }

        /// <summary>
        /// 解压缩文件
        /// </summary>
        /// <param name="zipFilePathName">zip文件具体路径+名</param>
        /// <param name="unCompressDir">解压路径</param>
        /// <param name="strPassword">解密码</param>
        /// <returns></returns>
        public UnCompressResults UnCompress7zZip(String zipFilePathName, String unCompressDir, String strPassword) {
            try {
                //SevenZipSharp.dll、zLib1.dll、7z.dll必须同时存在,否则常报“加载7z.dll错误”而项目引用时,只引用SevenZipSharp.dll就可以了
                string libPath = Application.StartupPath + @"\7z.dll";
                SevenZip.SevenZipCompressor.SetLibraryPath(libPath);

                bool isFileExist = File.Exists(zipFilePathName);
                if (false == isFileExist) {
                    MessageBox.Show("解压文件不存在!" + zipFilePathName);
                    return UnCompressResults.SourceObjectNotExist;
                }
                File.SetAttributes(zipFilePathName, FileAttributes.Normal);     //去掉只读属性

                if (Directory.Exists(unCompressDir) == false) {
                    Directory.CreateDirectory(unCompressDir);
                }

                SevenZip.SevenZipExtractor sevenZipExtractor;
                if (String.IsNullOrEmpty(strPassword)) {
                    sevenZipExtractor = new SevenZip.SevenZipExtractor(zipFilePathName);
                } else {
                    sevenZipExtractor = new SevenZip.SevenZipExtractor(zipFilePathName, strPassword);
                }

                sevenZipExtractor.ExtractArchive(unCompressDir);
                sevenZipExtractor.Dispose();
                return UnCompressResults.Success;
            } catch (Exception ex) {
                MessageBox.Show("解压缩文件失败!" + ex.Message);
                return UnCompressResults.UnKnown;
            }
        }
        #endregion


案例源码下载:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏17 转播转播
回复 论坛版权

使用道具 举报

沙发
wtujoxk 发表于 2016-5-24 10:48:43 | 只看该作者
能否在看电影时,把鼠标隐藏掉,有强迫症!
板凳
 楼主| 乔克斯 发表于 2016-5-24 15:46:29 | 只看该作者
wtujoxk 发表于 2016-5-24 10:48
能否在看电影时,把鼠标隐藏掉,有强迫症!

鼠标移到最右边就看不到了。
地板
logo005 发表于 2016-5-26 15:22:02 | 只看该作者
估计以后会用得到
5#
逗逼 发表于 2016-10-31 19:20:19 | 只看该作者
我目前就用ICSharpCode.SharpZipLib,压缩时把整个路径都搞进去了,很不爽。谢谢分享这个!
6#
人死卵朝天 发表于 2017-3-12 16:59:52 | 只看该作者
mark 备用
还真是没做过rar
大C# 支持rar的资源还这么稀缺?!
这不科学
7#
yi77b 发表于 2017-5-19 10:07:51 | 只看该作者
我用cmd运行unrar.exe 发现只能解压rar格式 哈哈 这下全了~
8#
qq674684107 发表于 2017-6-13 00:14:41 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
Aisa_Thanatos 发表于 2017-11-22 13:54:35 | 只看该作者
谢谢分享。
回复

使用道具 举报

10#
玉翼麒麟 发表于 2018-12-23 19:55:42 | 只看该作者
看一看好不好用
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-5-12 04:31, Processed in 0.566976 second(s), 32 queries , Gzip On.

快速回复 返回顶部 返回列表