不能使用7-Zip压缩标准输入和输出与标准输出?
题
我得到的错误 “未实现”。
我想压缩使用通过stdin 的7-Zip 然后取一个文件通过标准输出数据和做更多的转换与我的应用程序。在人页它示出此示例:
%回波FOO | 7Z虚设-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)使用一个文件管道(中?我从来没有这样做的话)3)别的东西。
解决方案
您可能想尝试像SevenZipSharp http://www.codeplex.com/sevenzipsharp,我从未使用过它的个人,但它提供了一个包装到了7za.dll COM库,可以对您有所帮助。
我已经写了利用经过处理的7-Zip自己,虽然我从来没有试图做stdin和stdout的东西都没有问题的工具。在帮助文件,我有我的版本的7-ZIP的-si开关状态的页面:
注意:7-Zip的当前版本不支持档案读取从stdin
请注意知道这可能是你的问题的根源,并可以指定两个开关可能会造成混乱的7-Zip。
它们在帮助显示的实施例似乎表明,-SO用于输出重定向到标准输出,但需要正常的基于文件的输入,以这样做。
其他提示
下面是从伊戈尔巴甫洛夫(7z格式的作者),一些信息在一个线程中关于 “7zip的作为简易替代gzip的/ bzip2的?”
在建议是基本上用7Z作为xz
替代。只是使用xz
应该工作,但它可能不是多线程(和7Z而定)。
虽然试图使用的7z如:
somecommand | 7zr a -si -so | nc -q 2 1.2.3.4 5678
7Z一个a.7z -SO结果 和结果 7Zèa.7z -si结果 不能Implemeted一个。因为.7z压缩格式要求 “寻找” 操作。
使用XZ格式代替:结果 7Z一个a.xz文件点击 它必须支持所有的模式。
7-Zip的认为它需要存档名称。点击 所以,你可以指定一些 档案名称,如a.xz结果 或点击 指定-an开关。
最终的解决办法是:
cat foo.txt | 7za a -an -txz -bd -si -so | dd of=foo.xz
错误报告表明,这应该在帮助:
从标准只为XZ,LZMA,焦油,gzip和bzip2的档案,以及从标准添加文件的当前版本的档案的7-Zip支持阅读只对7Z,XZ,gzip和bzip2的档案。
我管道stdout
成7zip
时遇到了类似的问题
代替从Process
直接调用命令的,我写的命令到一个批处理文件,然后运行该批处理文件。这是一个黑客,但它的工作。