首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能使用7-Zip压缩stdin并使用stdout输出吗?

不能使用7-Zip压缩stdin并使用stdout输出吗?
EN

Stack Overflow用户
提问于 2009-08-17 11:12:31
回答 4查看 9.4K关注 0票数 2

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

我想通过标准输入使用7-Zip压缩一个文件,然后通过标准输出获取数据,并使用我的应用程序进行更多的转换。在man page中,它显示了以下示例:

% echo foo | 7z a dummy -tgzip -si -so > /dev/null

我用的是Windows和C#。

结果:

代码语言:javascript
运行
复制
7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
Creating archive StdOut

System error:
Not implemented

代码:

代码语言:javascript
运行
复制
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?我从来没有做过这件事。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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用于将输出重定向到标准输出,但需要正常的基于文件的输入来完成此操作。

票数 4
EN

Stack Overflow用户

发布于 2016-04-26 04:47:56

以下是Igor Pavlov (7z的作者)在一篇关于"7zip as a drop-in replacement for gzip/bzip2?"的文章中提供的一些信息

建议基本上使用7z作为xz代理。只使用xz应该可以工作,但它可能不是多线程的( 7z可能是)。

在尝试使用7z时,例如:

代码语言:javascript
运行
复制
somecommand | 7zr a -si -so | nc -q 2 1.2.3.4 5678

Igor Pavlov says

7z a a.7z -so

7z e a.7z -si

不能被实现。因为.7z格式化需要“寻道”操作。

请改用xz格式:

7z a.xz文件

它必须支持所有模式。

And

7-Zip认为它需要档案名称。

因此您可以指定一些归档名称,如a.xz

指定-an开关。

最终的解决方案是:

代码语言:javascript
运行
复制
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归档文件。

票数 1
EN

Stack Overflow用户

发布于 2009-08-17 11:29:25

您可能需要使用7z download page上的“命令行版本”7za.exe。我看到您目前正在使用7z.exe,我非常确定这也是我以前遇到过的问题。

实际上,我想我转而使用PeaZip是因为7z给我带来的麻烦。PeaZip是关于7z和其他一些压缩实用程序的包装器,并且PeaZip具有更好的命令行界面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1287383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档