草庐IT

c++ - append 到 gzip 压缩的 Tar-Archive

我写了一个程序,生成一个tarball,它被zlib压缩。每隔一段时间,同一个程序应该向tarball添加一个新文件。根据定义,tarball需要空记录(512字节block)才能在它的末尾正常工作,这已经表明了我的问题。根据文档gzopen无法在r+模式下打开文件,这意味着我不能简单地跳转到空记录的开头,append我的文件信息并用空记录再次密封。现在,我已经束手无策了。只要不涉及空记录,append就可以在zlib上正常工作,但我需要它们来“完成”我的压缩tarball。有什么想法吗?啊,是的,如果我能避免解压整个东西和/或解析整个tarball,那就太好了。我也对我可以实现的其他

c++ - 如果使用 Gzip 类压缩,如何将文件名添加到存档?

我在加密前使用Gzip压缩数据。Gzipgz;gz.Put(file,size)gz.MessageEnd();gz.Get(file,gz.MaxRetrievable());我希望创建的gzip文件包含原始文件名作为元数据。我如何通过Crypto++界面执行此操作? 最佳答案 Iwantthecreatedgzipfiletoincludetheoriginalfilenameasmetadata.HowdoidothisthroughtheCrypto++interface?你不能开箱即用。这似乎是Crypto++的限制。(但

c++ - 超轻型 gzip 压缩实现?

我正在寻找基于libral(BSD、MIT、PD)许可证的C++超轻型gzip压缩/解压库(比zlib更轻的东西)。谷歌搜索显示了很多库,但它们要么过于臃肿(如Crypto++中的GZ压缩),要么许可证更加严格。我很难相信,竟然没有轻量级的免费gz实现...最好是C++(我需要以流的形式使用它),但C也可以。 最佳答案 静态链接的zlib可能是您可以获得的最轻量级的,它还有一个相当不错且非常宽松的许可证。如果它真的不够轻,即使考虑到链接器会去掉什么,然后将其缩小到自己的大小可能是一个可行的选择。

c++ - 我如何在阅读时 "unzip"gzip 流

我的程序使用HTTP通过网络读取gzipped文件。我需要我的程序能够解压缩内容并解析它,即使不是所有的gzip文件都到达了。可以吗?如果是这样,可以用C++完成吗?如果是,怎么办? 最佳答案 你或许可以试试gzstream图书馆:GzstreamisasmallC++library,basicallyjustawrapper,thatprovidesthefunctionalityofthezlibC-libraryinaC++iostream.ItisfreelyavailableundertheLGPLlicense.

c++ - 用于随机访问压缩数据文件的简单 API

请推荐适合以下任务的技术。我有一个相当大的(500MB)数据block,它基本上是一个数字矩阵。数据熵很低(它应该是可压缩的)并且它所在的存储空间很昂贵。我正在寻找的是用一个好的压缩算法(比如GZip)压缩它,并带有允许非常偶然的随机访问的标记。随机访问,如“从原始(未压缩)流中的位置[64位地址]读取字节”。这与像ZLIB这样的经典deflator库有点不同,它可以让你连续解压缩流。我想要的是,在延迟为每字节读取多达1MB的解压缩工作时进行随机访问。当然,我希望使用现有的库而不是重新发明NIH的轮子。 最佳答案 如果您使用Java

C++解压缩一个gzip字节数组

这是完整的情况:我正在为.tmx文件开发map阅读器,来自平铺。大多数情况下,图block都保存在base64字符串中,其中包含一个由gzip压缩的字节数组。现在我可以读取压缩字节数组,但我不知道如何解压缩它。我阅读了一些关于zlib和boost的文档,但两者都是关于文件流的,而且非常复杂......我是数据压缩领域的新手,所以如果有人知道某种解决方案或一些有用的文档,我将不胜感激。 最佳答案 #include#include#include#include#includeintmain(){usingnamespacestd;if

c++ - Boost Gzip 过滤器 : compile failes

我正在尝试从BoostGzip过滤器页面编译示例:#include#include#include#include#includeintmain(){usingnamespacestd;ifstreamfile("hello.gz",ios_base::in|ios_base::binary);filtering_streambufin;in.push(gzip_decompressor());in.push(file);boost::iostreams::copy(in,cout);}遗憾的是我的g++返回错误:gzlib.cpp:Infunction‘intmain()’:gzli

c++ - 使用 zlib 的 gzip 文件访问功能的未压缩文件大小

使用linux命令行工具gzip我可以使用gzip-l知道压缩文件的未压缩大小。我在zlib手册的“gzip文件访问函数”部分找不到类似的函数。在这个链接上,我找到了一个解决方案http://www.abeel.be/content/determine-uncompressed-size-gzip-file这涉及读取文件的最后4个字节,但我现在正在避免它,因为我更喜欢使用lib的函数。 最佳答案 没有可靠的方法可以在不解压缩或至少解码整个文件的情况下获取gzip文件的未压缩大小。原因有以下三个。首先,关于未压缩长度的唯一信息是gzi

c++ - boost iostreams 可以即时读取和压缩 gzip 文件吗?

我正在使用boostiostreams读取gzip文件:以下工作正常:namespaceio=boost::iostreams;io::filtering_istreamin;in.push(boost::iostreams::basic_gzip_decompressor());in.push(io::file_source("test.gz"));stringstreamss;copy(in,ss);但是,我不想占用内存来读取整个gzip文件进入内存。我希望能够增量读取文件。例如,如果我有一个从istream初始化自身的数据结构X,Xx;x.read(in);失败。大概这是因为我们

c++ - 带有检查点的开源压缩算法

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我正在使用gcc4.5.0和msvc8/9使用C++。我希望能够压缩一个文件(10Gb),然后使用我的应用程序打开该文件。但是,文件内容如此,我不必每次使用它们时都需要其中的所有内容。因此,例如,有一次我打开这些压缩文件之一,并决定我要在不加载文件的情况下搜索文件的95%。使用像gzip这样的压缩算法,这是不可能的:我必须先解压文件的前95%,然后才能解压后5%。So