我正在使用C++,Boost和Qt开发一个项目.我理解如何使用例如Qt中的qCompress()函数压缩单个文件和字节流.
如何压缩多个文件的目录,包括子目录?我正在寻找一个跨平台(Mac,Win,Linux)解决方案; 我宁愿不发动一堆新进程.
有没有一种标准方法可以将多个文件中的字节流组合成一个压缩存档,或者Boost iostream库中是否有可用的便捷功能或方法?
非常感谢您的帮助.
更新:QuaZip库看起来非常棒.下载包中的一个示例(在"tests"目录中)非常清楚地显示了如何压缩文件目录.
更新2:在我的Linux构建环境中完成此任务后,我发现QuaZip在Visual Studio编译器中根本不起作用.有可能解决所有这些编译器错误,但对任何看不起这条路径的人都要谨慎.
我正在寻找使用自定义VFS实现和自定义IO方法实现的透明SQLite 3 zlib压缩的现有解决方案.
是否有人知道现有的项目已经这样做了,还是我必须自己动手?我依稀记得在一年前看到类似的东西,但再也找不到了.
python中确定字符串是否被zlib压缩的最快方法是什么.我目前正在使用它.
def iscompressed(data):
result = True
try:
s =zlib.decompress(data)
except:
result = False
return result
Run Code Online (Sandbox Code Playgroud)
我相信有更优雅的方式.
我正在使用python将文件写入zlib压缩和cPickled字典.它似乎工作,但是,我无法弄清楚如何重新读取文件.
我包括以下代码,其中包括我尝试过的几个(以及相关的错误消息).我无处可去.
import sys
import cPickle as pickle
import zlib
testDict = { 'entry1':1.0, 'entry2':2.0 }
with open('test.gz', 'wb') as fp:
fp.write(zlib.compress(pickle.dumps(testDict, pickle.HIGHEST_PROTOCOL),9))
attempt = 0
try:
attempt += 1
with open('test.gz', 'rb') as fp:
step1 = zlib.decompress(fp)
successDict = pickle.load(step1)
except Exception, e:
print "Failed attempt:", attempt, e
try:
attempt += 1
with open('test.gz', 'rb').read() as fp:
step1 = zlib.decompress(fp)
successDict = pickle.load(step1)
except Exception, e:
print "Failed attempt:", attempt, e
try:
attempt += 1
with open('test.gz', 'rb') as …Run Code Online (Sandbox Code Playgroud) 我一直在尝试安装rubygems几个小时,但它一直在失败.错误是:
Installing rubygems-2.0.3 for ruby-2.0.0-p0..............................................................................................................................
Error running 'env GEM_PATH=/Users/Chris/.rvm/gems/ruby-2.0.0-p0:/Users/Chris/.rvm/gems/ruby-2.0.0-p0@global:/Users/Chris/.rvm/gems/ruby-2.0.0-p0:/Users/Chris/.rvm/gems/ruby-2.0.0-p0@global
GEM_HOME=/Users/Chris/.rvm/gems/ruby-2.0.0-p0 /Users/Chris/.rvm/rubies/ruby-2.0.0-p0/bin/ruby -d /Users/Chris/.rvm/src/rubygems-2.0.3/setup.rb --verbose',
please read /Users/Chris/.rvm/log/ruby-2.0.0-p0/rubygems.install.log
Run Code Online (Sandbox Code Playgroud)
(对不起,如果难以阅读,我不确定如何分解.)
rubygems.install.log:
前几行:
[2013-03-21 06:55:13] /Users/Chris/.rvm/rubies/ruby-2.0.0-p0/bin/ruby
Exception `LoadError' at /Users/Chris/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/rubygems.rb:1073 - cannot load such file -- rubygems/defaults/operating_system
Exception `LoadError' at /Users/Chris/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/rubygems.rb:1082 - cannot load such file -- rubygems/defaults/ruby
mkdir -p /Users/Chris/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0
mkdir -p /Users/Chris/.rvm/rubies/ruby-2.0.0-p0/bin
Run Code Online (Sandbox Code Playgroud)
完整档案:Pastebin
我已经尝试重新安装Xcode,确保我已经安装了xcode命令行工具,Rvm,ruby 2.0.0,几乎所有东西.我也尝试删除所有其他ruby版本和rvm要求不告诉我我需要任何我没有的东西.
有谁知道是什么原因引起的?
编辑:另外,我只是设法重新安装1.9.3,使用rubygems 1.9.3,绝对没问题.
编辑2:好的,现在我收到错误:
/Users/Chris/.rvm/src/rubygems-2.0.0/lib/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- zlib (LoadError)
Run Code Online (Sandbox Code Playgroud)
在日志中.
编辑3:rav rvm要求,没有我没有.尝试安装zlib会给我配置和make错误.
配置:
unknown option: --disable-shared
Run Code Online (Sandbox Code Playgroud)
使:
make: *** No rule …Run Code Online (Sandbox Code Playgroud) 我试图通过调用inflate函数来解压缩文件,但是即使我使用网站上的示例程序,它总是会失败Z_DATA_ERROR.我想也许我的zip文件可能不受支持.我附上了下面的拉链头图片.

这是我为执行解压缩而编写的函数.我立刻读了整个文件(大约34KB)并将其传递给这个函数.注意我已经尝试使用zip标头传递整个zip文件以及跳过zip文件头,并且只有在调用inflate()时,传递压缩数据才会失败,并且Z_DATA_ERROR失败.
int CHttpDownloader::unzip(unsigned char * pDest, unsigned long * ulDestLen, unsigned char * pSource, int iSourceLen)
{
int ret = 0;
unsigned int uiUncompressedBytes = 0; // Number of uncompressed bytes returned from inflate() function
unsigned char * pPositionDestBuffer = pDest; // Current position in dest buffer
unsigned char * pLastSource = &pSource[iSourceLen]; // Last position in source buffer
z_stream strm;
// Skip over local file header
SLocalFileHeader * header = (SLocalFileHeader *) pSource;
pSource += sizeof(SLocalFileHeader) + header->sFileNameLen …Run Code Online (Sandbox Code Playgroud) 在尝试使用ZLib压缩时,我遇到了一个奇怪的问题.如果源数组的长度至少为32752字节,则使用随机数据解压缩zlib压缩的字节数组会失败.这是一个重现问题的小程序,你可以在IDEOne上看到它.压缩和解压缩方法是标准代码摘录教程.
public class ZlibMain {
private static byte[] compress(final byte[] data) {
final Deflater deflater = new Deflater();
deflater.setInput(data);
deflater.finish();
final byte[] bytesCompressed = new byte[Short.MAX_VALUE];
final int numberOfBytesAfterCompression = deflater.deflate(bytesCompressed);
final byte[] returnValues = new byte[numberOfBytesAfterCompression];
System.arraycopy(bytesCompressed, 0, returnValues, 0, numberOfBytesAfterCompression);
return returnValues;
}
private static byte[] decompress(final byte[] data) {
final Inflater inflater = new Inflater();
inflater.setInput(data);
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length)) {
final byte[] buffer = new byte[Math.max(1024, data.length / 10)];
while (!inflater.finished()) { …Run Code Online (Sandbox Code Playgroud) 我有一个用zlib的deflate()函数压缩的文件的第一个连续的2/3rds.最后1/3在传输中丢失了.原始未压缩文件为600KB.
发送器多次调用Deflate,同时将原始文件切割为2KB的块大小,并在传递Z_FINISH时将Z_NO_FLUSH传递给文件末尾.生成的完整压缩文件已传输,但如所述部分丢失.
是否有可能恢复原始文件的一部分?如果是的话,有什么建议吗?
我正在使用ZLIB的普通C实现和/或ZLIB的Python 2.7实现.
我正在使用此函数解压缩正文或HTTP响应(如果使用gzip对其进行了压缩,压缩或放气)。
def uncompress_body(self, compression_type, body):
if compression_type == 'gzip' or compression_type == 'compress':
return zlib.decompress(body)
elif compression_type == 'deflate':
compressor = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS)
compressed = compressor.compress(body)
compressed += compressor.flush()
return base64.b64encode(compressed)
return body
Run Code Online (Sandbox Code Playgroud)
但是python抛出此错误消息。
TypeError: a bytes-like object is required, not '_io.BytesIO'
Run Code Online (Sandbox Code Playgroud)
在这条线上:
return zlib.decompress(body)
Run Code Online (Sandbox Code Playgroud)
本质上,我如何从“ _io.BytesIO”转换为类似字节的对象?
谢谢
无法使用mysql2来安装。\n我这么问是因为一些网站和博客已经展示了如何解决由,bundle install引起的问题,但我找不到由 引起的解决方案。还有其他人遇到过同样的问题吗?sslzstdzlib
顺便说一句,我是bundle install在本地运行,而不是在docker上运行。
已经完成了:
\nbrew install mysql, openssl@3, zstd, zlib这是日志输出。
\nFetching gem metadata from https://rubygems.org/..........\nResolving dependencies...\nUsing rake 13.0.6\nUsing concurrent-ruby 1.2.2\nUsing minitest 5.18.0\nUsing zeitwerk 2.6.8\nUsing websocket-extensions 0.1.5\nUsing erubi 1.12.0\nUsing racc 1.6.2\nUsing date 3.3.3\nUsing rack 2.2.7\nUsing bindex 0.8.1\nUsing bundler 2.3.26\nUsing marcel 1.0.2\nUsing mini_mime 1.1.2\nUsing timeout 0.3.2\nUsing rb-fsevent 0.11.2\nUsing crass 1.0.6\nUsing msgpack …Run Code Online (Sandbox Code Playgroud)