ICSharpCode.SharpZipLib生成tar、tar.gz
2013-06-29 19:23
309 查看
源码地址:http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx
调用方法:
Note:
在linux下使用gzip命令解压生成的tar.gz包会报如下错误:
gzip: dfis_bp.tar.gz: decompression OK, trailing garbage ignored
报这样的错通常是因为tar.gz文件的尾部有一串0x00或者0xff,这是由于很多场合下压缩算法都会在压缩完成后补充一些字节以对齐数据块。gzip在正确解压完tar.gz的内容后开始解压这样的全零填充字节就会报这样的错,并不会影响使用。
用安静模式 (gzip -q) 可以消除这些警报。
调用方法:
/// <summary> /// 生成 ***.tar.gz 文件 /// </summary> /// <param name="strBasePath">文件基目录(源文件、生成文件所在目录)</param> /// <param name="strSourceFolderName">待压缩的源文件夹名</param> public bool CreatTarGzArchive(string strBasePath, string strSourceFolderName) { if (string.IsNullOrEmpty(strBasePath) || string.IsNullOrEmpty(strSourceFolderName) || !System.IO.Directory.Exists(strBasePath) || !System.IO.Directory.Exists(Path.Combine(strBasePath, strSourceFolderName))) { return false; } Environment.CurrentDirectory = strBasePath; string strSourceFolderAllPath = Path.Combine(strBasePath, strSourceFolderName); string strOupFileAllPath = Path.Combine(strBasePath, strSourceFolderName + ".tar.gz"); Stream outTmpStream = new FileStream(strOupFileAllPath, FileMode.OpenOrCreate); //注意此处源文件大小大于4096KB Stream outStream = new GZipOutputStream(outTmpStream); TarArchive archive = TarArchive.CreateOutputTarArchive(outStream, TarBuffer.DefaultBlockFactor); TarEntry entry = TarEntry.CreateEntryFromFile(strSourceFolderAllPath); archive.WriteEntry(entry, true); if (archive != null) { archive.Close(); } outTmpStream.Close(); outStream.Close(); return true; }
Note:
在linux下使用gzip命令解压生成的tar.gz包会报如下错误:
gzip: dfis_bp.tar.gz: decompression OK, trailing garbage ignored
报这样的错通常是因为tar.gz文件的尾部有一串0x00或者0xff,这是由于很多场合下压缩算法都会在压缩完成后补充一些字节以对齐数据块。gzip在正确解压完tar.gz的内容后开始解压这样的全零填充字节就会报这样的错,并不会影响使用。
用安静模式 (gzip -q) 可以消除这些警报。
/// <summary> /// 生成 ***.tar 文件 /// </summary> /// <param name="strBasePath">文件基目录(源文件、生成文件所在目录)</param> /// <param name="strSourceFolderName">待压缩的源文件夹名</param> public bool CreatTarArchive(string strBasePath, string strSourceFolderName) { if (string.IsNullOrEmpty(strBasePath) || string.IsNullOrEmpty(strSourceFolderName) || !System.IO.Directory.Exists(strBasePath) || !System.IO.Directory.Exists(Path.Combine(strBasePath, strSourceFolderName))) { return false; } Environment.CurrentDirectory = strBasePath; string strSourceFolderAllPath = Path.Combine(strBasePath, strSourceFolderName); string strOupFileAllPath = Path.Combine(strBasePath, strSourceFolderName + ".tar"); Stream outStream = new FileStream(strOupFileAllPath, FileMode.OpenOrCreate); TarArchive archive = TarArchive.CreateOutputTarArchive(outStream, TarBuffer.DefaultBlockFactor); TarEntry entry = TarEntry.CreateEntryFromFile(strSourceFolderAllPath); archive.WriteEntry(entry, true); if (archive != null) { archive.Close(); } outStream.Close(); return true; }
/// <summary> /// tar包解压 /// </summary> /// <param name="strFilePath">tar包路径</param> /// <param name="strUnpackDir">解压到的目录</param> /// <returns></returns> public static bool UnpackTarFiles(string strFilePath, string strUnpackDir) { try { if (!File.Exists(strFilePath)) { return false; } strUnpackDir = strUnpackDir.Replace("/", "\\"); if (!strUnpackDir.EndsWith("\\")) { strUnpackDir += "\\"; } if (!Directory.Exists(strUnpackDir)) { Directory.CreateDirectory(strUnpackDir); } FileStream fr = new FileStream(strFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); DhcEc.SharpZipLib.Tar.TarInputStream s = new DhcEc.SharpZipLib.Tar.TarInputStream(fr); DhcEc.SharpZipLib.Tar.TarEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { string directoryName = Path.GetDirectoryName(theEntry.Name); string fileName = Path.GetFileName(theEntry.Name); if (directoryName != String.Empty) Directory.CreateDirectory(strUnpackDir + directoryName); if (fileName != String.Empty) { FileStream streamWriter = File.Create(strUnpackDir + 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; } } streamWriter.Close(); } } s.Close(); fr.Close(); return true; } catch (Exception) { return false; } }
/// <summary> /// zip压缩文件 /// </summary> /// <param name="filename">filename生成的文件的名称,如:C\123\123.zip</param> /// <param name="directory">directory要压缩的文件夹路径</param> /// <returns></returns> public static bool PackFiles(string filename, string directory) { try { directory = directory.Replace("/", "\\"); if (!directory.EndsWith("\\")) directory += "\\"; if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } if (File.Exists(filename)) { File.Delete(filename); } FastZip fz = new FastZip(); fz.CreateEmptyDirectories = true; fz.CreateZip(filename, directory, true, ""); return true; } catch (Exception) { return false; } }
/// <summary> /// zip解压文件 /// </summary> /// <param name="file">压缩文件的名称,如:C:\123\123.zip</param> /// <param name="dir">dir要解压的文件夹路径</param> /// <returns></returns> public static bool UnpackFiles(string file, string dir) { try { if (!File.Exists(file)) return false; dir = dir.Replace("/", "\\"); if (!dir.EndsWith("\\")) dir += "\\"; if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); FileStream fr = new FileStream(strFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); DhcEc.SharpZipLib.Zip.ZipInputStream s = new DhcEc.SharpZipLib.Zip.ZipInputStream(fr); DhcEc.SharpZipLib.Zip.ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { string directoryName = Path.GetDirectoryName(theEntry.Name); string fileName = Path.GetFileName(theEntry.Name); if (directoryName != String.Empty) Directory.CreateDirectory(dir + directoryName); if (fileName != String.Empty) { FileStream streamWriter = File.Create(dir + 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; } } streamWriter.Close(); } } s.Close(); fr.Close(); return true; } catch (Exception) { return false; } }
相关文章推荐
- ICSharpCode.SharpZipLib生成tar、tar.gz
- ICSharpCode.SharpZipLib生成tar、tar.gz
- C#文件压缩:ICSharpCode.SharpZipLib生成zip、tar、tar.gz
- ASP.NET生成压缩文件(rar打包)ICSharpCode.SharpZipLib.dll
- 未能加载文件或程序集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=n
- C# 压缩文件 ICSharpCode.SharpZipLib.dll
- C# ICSharpCode.SharpZipLib
- ICSharpCode.SharpZipLib 开源压缩库使用示例
- C# 压缩解压缩操作,ICSharpCode.SharpZipLib
- c# ICSharpCode.SharpZipLib压缩文件时附带空文件夹
- ICSharpCode.SharpZipLib
- ICSharpCode.SharpZipLib 使用演示
- C#/ASP.NET/WinForm 通过ICSharpCode.SharpZipLib.dll实现文件夹、文件的压缩与解压
- [转]ICSharpCode.SharpZipLib 初级使用
- ICSharpCode.SharpZipLib.dll压缩的zip包,7zip解压时出错
- ICSharpCode.SharpZipLib.dll实现压缩解压一个树形目录
- ICSharpCode.SharpZipLib.Zip 中文乱码
- ICSharpCode.SharpZipLib.dll实现压缩解压一个树形目录
- ICSharpCode.SharpZipLib压缩的文件不能解压的原因
- 压缩解压目录和文件--ICSharpCode.SharpZipLib.dll 算法 (转)