手机上两个文件夹怎么压缩成一个压缩包,两个文件夹怎么压缩成一个压缩包

先定义一个枚举,用于程序表示是哪个压缩算法。

01///<summary

02///压缩枚举

03///</summary

04publicenumZipEnum

05{

06//压缩时间长,压缩率高

07BZIP2,

08

09//压缩效率高,压缩率低

10GZIP

11}

单个文件的压缩:

01#region制作压缩包(单个文件压缩)

02///<summary

03///制作压缩包(单个文件压缩)

04///</summary

05///<paramname="sourceFileName"原文件</param

06///<paramname="zipFileName"压缩文件</param

07///<paramname="zipEnum"压缩算法枚举</param

08///<returns压缩成功标志</returns

09publicstaticboolZipFile(stringsrcFileName,stringzipFileName,ZipEnumzipEnum)

10{

11boolflag=true;

12try

13{

14switch(zipEnum)

15{

16caseZipEnum.BZIP2:

17

18FileStreaminStream=File.OpenRead(srcFileName);

19FileStreamoutStream=File.Open(zipFileName,FileMode.Create);

20

21//参数true表示压缩完成后,inStream和outStream连接都释放

22BZip2.Compress(inStream,outStream,true,4096);

23

24inStream.Close();

25outStream.Close();

26

27

28break;

29caseZipEnum.GZIP:

30

31FileStreamsrcFile=File.OpenRead(srcFileName);

32

33GZipOutputStreamzipFile=newGZipOutputStream(File.Open(zipFileName,FileMode.Create));

34

35byte[]fileData=newbyte[srcFile.Length];

36srcFile.Read(fileData,0,(int)srcFile.Length);

37zipFile.Write(fileData,0,fileData.Length);

38

39srcFile.Close();

40zipFile.Close();

41

42break;

43default:break;

44}

45}

46catch

47{

48flag=false;

49}

50returnflag;

51}

52#endregion

单个文件的解压缩:

01#region解压缩包(单个文件解压缩)

02///<summary

03///解压缩包(单个文件解压缩)

04///</summary

05///<paramname="zipFileName"压缩文件</param

06///<paramname="unzipFileName"解压缩文件</param

07///<paramname="zipEnum"压缩算法枚举</param

08///<returns压缩成功标志</returns

09publicstaticboolUnZipFile(stringzipFileName,stringunzipFileName,ZipEnumzipEnum)

10{

11boolflag=true;

12try

13{

14switch(zipEnum)

15{

16caseZipEnum.BZIP2:

17FileStreaminStream=File.OpenRead(zipFileName);

18FileStreamoutStream=File.Open(unzipFileName,FileMode.Create);

19BZip2.Decompress(inStream,outStream,true);

20break;

21caseZipEnum.GZIP:

22GZipInputStreamzipFile=newGZipInputStream(File.OpenRead(zipFileName));

23FileStreamdestFile=File.Open(unzipFileName,FileMode.Create);

24

25intbufferSize=2048*2;

26byte[]fileData=newbyte[bufferSize];

27

28while(bufferSize0)

29{

30bufferSize=zipFile.Read(fileData,0,bufferSize);

31zipFile.Write(fileData,0,bufferSize);

32}

33destFile.Close();

34zipFile.Close();

35break;

36default:break;

37}

38}

39catch

40{

41flag=false;

42}

43returnflag;

44}

45#endregion

上面的两个方法在引用了dll后,可以直接使用。

看到这里,相信读者有疑问了,如果我想让多个文件压缩到1个zip包里呢?甚至可以给文件加密?给zip包加注释?

好吧,我这里继续贴两个方法,都经过测试,可用。

制作压缩包

01#region制作压缩包(将多个文件压缩到一个压缩包,支持加密、注释)

02///<summary

03///制作压缩包(多个文件压缩到一个压缩包,支持加密、注释)

04///</summary

05///<paramname="topDirectoryName"压缩文件目录</param

06///<paramname="zipedFileName"压缩包文件名</param

07///<paramname="compresssionLevel"压缩级别1-9</param

08///<paramname="password"密码</param

09///<paramname="comment"注释</param

10publicstaticvoidZipFiles(stringtopDirectoryName,stringzipedFileName,intcompresssionLevel,stringpassword,stringcomment)

11{

12using(ZipOutputStreamzos=newZipOutputStream(File.Open(zipedFileName,FileMode.OpenOrCreate)))

13{

14if(compresssionLevel!=0)

15{

16zos.SetLevel(compresssionLevel);//设置压缩级别

17}

18

19if(!string.IsNullOrEmpty(password))

20{

21zos.Password=password;//设置zip包加密密码

22}

23

24if(!string.IsNullOrEmpty(comment))

25{

26zos.SetComment(comment);//设置zip包的注释

27}

28

29//循环设置目录下所有的*.jpg文件(支持子目录搜索)

30foreach(stringfileinDirectory.GetFiles(topDirectoryName,"*.jpg",SearchOption.AllDirectories))

31{

32if(File.Exists(file))

33{

34FileInfoitem=newFileInfo(file);

35FileStreamfs=File.OpenRead(item.FullName);

36byte[]buffer=newbyte[fs.Length];

37fs.Read(buffer,0,buffer.Length);

38

39ZipEntryentry=newZipEntry(item.Name);

40zos.PutNextEntry(entry);

41zos.Write(buffer,0,buffer.Length);

42}

43}

44}

45}

46#endregion

解压缩包:

01#region解压缩包(将压缩包解压到指定目录)

02///<summary

03///解压缩包(将压缩包解压到指定目录)

04///</summary

05///<paramname="zipedFileName"压缩包名称</param

06///<paramname="unZipDirectory"解压缩目录</param

07///<paramname="password"密码</param

08publicstaticvoidUnZipFiles(stringzipedFileName,stringunZipDirectory,stringpassword)

09{

10using(ZipInputStreamzis=newZipInputStream(File.Open(zipedFileName,FileMode.OpenOrCreate)))

11{

12if(!string.IsNullOrEmpty(password))

13{

14zis.Password=password;//有加密文件的,可以设置密码解压

15}

16

17ZipEntryzipEntry;

18while((zipEntry=zis.GetNextEntry())!=null)

19{

20stringdirectoryName=Path.GetDirectoryName(unZipDirectory);

21stringpathName=Path.GetDirectoryName(zipEntry.Name);

22stringfileName=Path.GetFileName(zipEntry.Name);

23

24pathName=pathName.Replace(".","$");

25directoryName+="\\"+pathName;

26

27if(!Directory.Exists(directoryName))

28{

29Directory.CreateDirectory(directoryName);

30}

31

32if(!string.IsNullOrEmpty(fileName))

33{

34FileStreamfs=File.Create(Path.Combine(directoryName,fileName));

35intsize=2048;

36byte[]bytes=newbyte[2048];

37while(true)

38{

39size=zis.Read(bytes,0,bytes.Length);

40if(size0)

41{

42fs.Write(bytes,0,size);

43}

44else

45{

46break;

47}

48}

49fs.Close();

50}

51}

52}

53}

调用时我们可以这么写:

本文来自“无人街七号”用户投稿,该文观点仅代表作者本人,不代表华夏信息网立场,本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请发送邮件至1470280261#qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。如若转载,请注明出处:http://www.xxxwhg.com/zh/96309.html

上一篇 2023-01-01 10:42:03
下一篇 2023-01-01 09:52:03

相关推荐

  • 手机什么方式打开文件夹

    主要操作方法和步骤如下:(1)点击【联系人】首先在电脑和手机上登录同一个QQ,登录以后点击手机QQ下面的“联系人”选项;(2)点击【我的电脑】然后在打开的联系人页面里,点击设备下面的“我的电脑”选项;(3)点击【电脑图标】接着在打开的我的电脑页面里,点击下面的“

    2023-04-20 05:00:02
    258
  • 什么叫手机打印文件夹

    现在都流行移动办公,很多文件需要打印、而且很多家里有小孩的家庭也需要打印学习资料,为了满足需求都购买一个打印机,方便工作生活的需要,比较好的打印机价格稍贵一点,当然功能也比较先进,甚至还带有无线功能,支持U盘直接打印等;有些便宜的打印机功能也相对单一的,如

    2023-04-18 06:30:02
    318
  • 手机zjwh是什么文件夹

    各大品牌手机每年都会推出新机器,看似同价位、同配置的手机,型号前后缀名称却各不相同,你知道他们的含义嘛?快跟吉米柚一起了解一下!A的含义为降低,当手机型号的后缀名称为A时,则说明该手机配置较之前的版本降低,比如内存减少、像素质量较低等,该类手机价格也会比较便

    2023-04-09 15:00:03
    220
  • 手机不能打开什么文件夹

    自从有了智能手机,我们的生活就发生了诸多变化。比如旅游的时候再也不用携带笨重的相机,掏出手机拍完之后就能分享到各种社交app或者论坛上。享受音乐也不再需要另购MP3播放器,手机的各种音乐APP和自带音效足以应付日常需要,何况现在很多音乐APP支持无损格式的播放。也正因

    2023-04-07 12:30:03
    310