我得到的错误是“未实现”。
我想通过标准输入使用7-Zip压缩一个文件,然后通过标准输出获取数据,并使用我的应用程序进行更多的转换。在man page中,它显示了以下示例:
% echo foo | 7z a dummy -tgzip -si -so > /dev/null
我用的是Windows和C#。
结果:
7-Zip 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03
Creating archive StdOut
System error:
Not implemented
代码:
public static byte[] a7zipBuf(byte[] b)
{
string line;
var p = new Process();
line = string.Format("a dummy -t7z -si -so ");
p.StartInfo.Arguments = line;
p.StartInfo.FileName = @"C:\Program Files\7-Zip\7z.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();
p.StandardInput.BaseStream.Write(b, 0, b.Length);
p.StandardInput.Close();
Console.Write(p.StandardError.ReadToEnd());
//Console.Write(p.StandardOutput.ReadToEnd());
return p.StandardOutput.BaseStream.ReadFully();
}
有没有另一种简单的方法将文件读入内存?
现在我可以1)写入临时文件并读取(很容易,并且可以复制/粘贴一些代码) 2)使用文件管道(medium?我从来没有做过这件事。
发布于 2009-08-17 13:02:27
你可能想尝试像SevenZipSharp http://www.codeplex.com/sevenzipsharp这样的东西,我从来没有亲自使用过它,但它提供了一个7za.dll COM库的包装器,这可能对你有帮助。
我自己也写过使用7-Zip的实用程序,虽然我从来没有尝试过做StdIn和StdOut之类的东西,但也没有遇到过问题。在我的7-Zip版本的帮助文件中,-si开关上的页面显示:
注意:当前版本的7-Zip不支持从标准输入中读取档案。
请注意,如果这可能是问题的根源,指定两个开关可能会使7-Zip混淆。
他们在帮助中显示的示例似乎表明,-so用于将输出重定向到标准输出,但需要正常的基于文件的输入来完成此操作。
发布于 2016-04-26 04:47:56
以下是Igor Pavlov (7z的作者)在一篇关于"7zip as a drop-in replacement for gzip/bzip2?"的文章中提供的一些信息
建议基本上使用7z作为xz
代理。只使用xz
应该可以工作,但它可能不是多线程的( 7z可能是)。
在尝试使用7z时,例如:
somecommand | 7zr a -si -so | nc -q 2 1.2.3.4 5678
7z a a.7z -so
和
7z e a.7z -si
不能被实现。因为.7z格式化需要“寻道”操作。
请改用xz格式:
7z a.xz文件
它必须支持所有模式。
7-Zip认为它需要档案名称。
因此您可以指定一些归档名称,如a.xz
或
指定-an开关。
最终的解决方案是:
cat foo.txt | 7za a -an -txz -bd -si -so | dd of=foo.xz
A bug report建议这应该在帮助中:
当前版本的7-Zip仅支持从标准压缩标准中读取xz、lzma、tar、gzip和bzip2归档文件,并仅支持从标准压缩标准中添加7z、xz、gzip和bzip2归档文件。
发布于 2009-08-17 11:29:25
您可能需要使用7z download page上的“命令行版本”7za.exe
。我看到您目前正在使用7z.exe
,我非常确定这也是我以前遇到过的问题。
实际上,我想我转而使用PeaZip是因为7z给我带来的麻烦。PeaZip是关于7z和其他一些压缩实用程序的包装器,并且PeaZip具有更好的命令行界面。
https://stackoverflow.com/questions/1287383
复制相似问题