加解压开源组件-SharpZipLib
使用國外開源加壓解壓庫ICSharpCode.SharpZipLib實現加壓,該庫的官方網站為
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;
????????}//解壓結束
????????#endregion
轉載于:https://www.cnblogs.com/jake-hl/p/4022086.html
總結
以上是生活随笔為你收集整理的加解压开源组件-SharpZipLib的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android ContentProvi
- 下一篇: 《计算机组成与体系结构:性能设计》读后小