使用LZMA的7Zip CLI压缩文件

问题描述

我尝试使用LZMA在控制台中压缩文件

7z a -t7z output input
or
7z a -t7z -m0=lzma output input

但是,我无法在客户端上打开它。

如何在控制台中将文件压缩为LZMA存档?

问题可能是上述命令在归档文件添加文件。但是,我想压缩没有文件结构的数据文件中的数据。

是否可以使用LZMA将数据文件压缩为压缩数据文件

修改

我看到投票否决,这意味着问题在某种程度上是“不正确的”。

所以我将尝试解释我想要实现的目标。

我在服务器端压缩数据,并在客户端应用程序上使用它们。我像这样在Node.js中成功做到了:

const lzma = require('lzma');

lzma.compress(inputBuffer,1,callback);

function callback(data,err) {
    writefile(outputPath,Buffer.from(data));
}

但是,它非常慢。所以我想打电话给7Zip进行压缩。

我的.NET服务器也以类似的方式对其进行压缩。

byte[] barData;
using (var barStream = dukasDataHelper.SerializeLightBars(lightBars.ToArray()))
using (var zippedStream = zipLzma.Zip(barStream))
{
    barData = zippedStream.ToArray();
}

我的问题是我无法在CLI中设置正确的选项,以便能够在客户端中读取文件

我的客户代码C#是:

using (var blobStream = new MemoryStream(blobBytes))
using (var barStream = new ZipLzma().Unzip(blobStream))
{
    SaveDataSet(barStream,localPath);
}

通过CLI压缩时出现此错误消息:

  $exception {"Data Error"}
  Data: {System.Collections.ListDictionaryInternal}
  at SevenZipLzma.LZMA.Decoder.Code(Stream inStream,Stream outStream,Int64 
  inSize,Int64 outSize,ICodeProgress progress)
  at SevenZipLzma.ZipLzma.Unzip(Stream stream)

由于代码在我使用Node.js压缩时可以正常工作,而在通过CLI压缩时却无法正常工作,因此这意味着有问题。

解决方法

7zip创建文件和目录的存档,而LZMA生成单个压缩数据流。它们的格式不同。可以在7zip存档内 使用LZMA压缩条目(或LZMA2或Deflate或其他几种压缩方法)。

您可以尝试使用xz的{​​{1}}命令来生成LZMA流。