日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

加解压开源组件-SharpZipLib

發(fā)布時間:2025/6/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加解压开源组件-SharpZipLib 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用國外開源加壓解壓庫ICSharpCode.SharpZipLib實現(xiàn)加壓,該庫的官方網(wǎng)站為
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

使用前需先添加引用:using?ICSharpCode.SharpZipLib.Zip;

#region?加壓解壓方法
????????///?<summary>
????????///?功能:壓縮文件(暫時只壓縮文件夾下一級目錄中的文件,文件夾及其子級被忽略)
????????///?</summary>
????????///?<param?name="dirPath">被壓縮的文件夾夾路徑</param>
????????///?<param?name="zipFilePath">生成壓縮文件的路徑,為空則默認與被壓縮文件夾同一級目錄,名稱為:文件夾名+.zip</param>
????????///?<param?name="err">出錯信息</param>
????????///?<returns>是否壓縮成功</returns>
????????public?bool?ZipFile(string?dirPath,?string?zipFilePath,?out?string?err)
????????{
????????????err?=?"";
????????????if?(dirPath?==?string.Empty)
????????????{
????????????????err?=?"要壓縮的文件夾不能為空!";
????????????????return?false;
????????????}
????????????if?(!Directory.Exists(dirPath))
????????????{
????????????????err?=?"要壓縮的文件夾不存在!";
????????????????return?false;
????????????}
????????????//壓縮文件名為空時使用文件夾名+.zip
????????????if?(zipFilePath?==?string.Empty)
????????????{
????????????????if?(dirPath.EndsWith("\\"))
????????????????{
????????????????????dirPath?=?dirPath.Substring(0,?dirPath.Length?-?1);
????????????????}
????????????????zipFilePath?=?dirPath?+?".zip";
????????????}

????????????try
????????????{
????????????????string[]?filenames?=?Directory.GetFiles(dirPath);
????????????????using?(ZipOutputStream?s?=?new?ZipOutputStream(File.Create(zipFilePath)))
????????????????{
????????????????????s.SetLevel(9);
????????????????????byte[]?buffer?=?new?byte[4096];
????????????????????foreach?(string?file?in?filenames)
????????????????????{
????????????????????????ZipEntry?entry?=?new?ZipEntry(Path.GetFileName(file));
????????????????????????entry.DateTime?=?DateTime.Now;
????????????????????????s.PutNextEntry(entry);
????????????????????????using?(FileStream?fs?=?File.OpenRead(file))
????????????????????????{
????????????????????????????int?sourceBytes;
????????????????????????????do
????????????????????????????{
????????????????????????????????sourceBytes?=?fs.Read(buffer,?0,?buffer.Length);
????????????????????????????????s.Write(buffer,?0,?sourceBytes);
????????????????????????????}?while?(sourceBytes?>?0);
????????????????????????}
????????????????????}
????????????????????s.Finish();
????????????????????s.Close();
????????????????}
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????err?=?ex.Message;
????????????????return?false;
????????????}
????????????return?true;
????????}

????????///?<summary>
????????///?功能:解壓zip格式的文件。
????????///?</summary>
????????///?<param?name="zipFilePath">壓縮文件路徑</param>
????????///?<param?name="unZipDir">解壓文件存放路徑,為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾</param>
????????///?<param?name="err">出錯信息</param>
????????///?<returns>解壓是否成功</returns>
????????public?bool?UnZipFile(string?zipFilePath,?string?unZipDir,?out?string?err)
????????{
????????????err?=?"";
????????????if?(zipFilePath?==?string.Empty)
????????????{
????????????????err?=?"壓縮文件不能為空!";
????????????????return?false;
????????????}
????????????if?(!File.Exists(zipFilePath))
????????????{
????????????????err?=?"壓縮文件不存在!";
????????????????return?false;
????????????}
????????????//解壓文件夾為空時默認與壓縮文件同一級目錄下,跟壓縮文件同名的文件夾
????????????if?(unZipDir?==?string.Empty)
????????????????unZipDir?=?zipFilePath.Replace(Path.GetFileName(zipFilePath),?Path.GetFileNameWithoutExtension(zipFilePath));
????????????if?(!unZipDir.EndsWith("\\"))
????????????????unZipDir?+=?"\\";
????????????if?(!Directory.Exists(unZipDir))
????????????????Directory.CreateDirectory(unZipDir);

????????????try
????????????{
????????????????using?(ZipInputStream?s?=?new?ZipInputStream(File.OpenRead(zipFilePath)))
????????????????{

????????????????????ZipEntry?theEntry;
????????????????????while?((theEntry?=?s.GetNextEntry())?!=?null)
????????????????????{
????????????????????????string?directoryName?=?Path.GetDirectoryName(theEntry.Name);
????????????????????????string?fileName?=?Path.GetFileName(theEntry.Name);
????????????????????????if?(directoryName.Length?>?0)
????????????????????????{
????????????????????????????Directory.CreateDirectory(unZipDir?+?directoryName);
????????????????????????}
????????????????????????if?(!directoryName.EndsWith("\\"))
????????????????????????????directoryName?+=?"\\";
????????????????????????if?(fileName?!=?String.Empty)
????????????????????????{
????????????????????????????using?(FileStream?streamWriter?=?File.Create(unZipDir?+?theEntry.Name))
????????????????????????????{

????????????????????????????????int?size?=?2048;
????????????????????????????????byte[]?data?=?new?byte[2048];
????????????????????????????????while?(true)
????????????????????????????????{
????????????????????????????????????size?=?s.Read(data,?0,?data.Length);
????????????????????????????????????if?(size?>?0)
????????????????????????????????????{
????????????????????????????????????????streamWriter.Write(data,?0,?size);
????????????????????????????????????}
????????????????????????????????????else
????????????????????????????????????{
????????????????????????????????????????break;
????????????????????????????????????}
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????}//while
????????????????}
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????err?=?ex.Message;
????????????????return?false;
????????????}
????????????return?true;
????????}//解壓結(jié)束
????????#endregion

轉(zhuǎn)載于:https://www.cnblogs.com/jake-hl/p/4022086.html

總結(jié)

以上是生活随笔為你收集整理的加解压开源组件-SharpZipLib的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。