我得到的错误 “未实现”。

我想压缩使用通过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的档案。

您可能需要使用7za.exe,这是“命令行版本的” 7z格式下载页面上。我看到你正在使用7z.exe,我敢肯定这是我以前也遇到过,以及一个问题。


其实,我觉得我切换到 PeaZip 因为烦恼7Z是给我的。 PeaZip是围绕7Z和一些其他压缩工具的包装,和PeaZip具有更好一点命令行界面。

我管道stdout7zip时遇到了类似的问题

代替从Process直接调用命令的,我写的命令到一个批处理文件,然后运行该批处理文件。这是一个黑客,但它的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top