標準出力と標準入力と出力を圧縮する7 - ジップを使用することができませんか?
質問
私はエラーが "実装されていません" を取得ます。
私は、取る標準入力経由 7 - ジップを使用してファイルを圧縮したいです標準出力を介してデータと自分のアプリケーションでより多くの変換を行います。それは、この例を示しの manページでます:
%エコーの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();
}
ファイルをメモリに読み込むためのもう一つの簡単な方法はありますか?
2)使用)ファイルパイプを(媒体が?私はそれをやったことがない)3)何か他のものです。今、私は、1)一時ファイルに書き込むことができますし、(簡単に読んで、いくつかのコードをコピー/ペーストすることができます
解決
あなたはSevenZipSharp http://www.codeplex.com/sevenzipsharp、私は個人的にそれを使ったことがないが、それはあなたに役立つかもしれ7za.dll COMライブラリへのラッパーを提供しています。
私は、プロセスを介して自分自身を7 - ジップを利用ユーティリティを書いていると私は標準入出力のものを行うことを試みたことがないのに問題がありませんでした。ヘルプファイルでは、私は私のバージョンで持って7-ZIP -Siスイッチ状態にページをます:
これは、それが7 - ジップを混乱される可能性があります両方のスイッチを指定して、あなたの問題の原因であるかもしれない場合は、注:7 - 郵便番号の現在のバージョンは、標準入力からのアーカイブの読み取りをサポートしていません。
必ず注意します。
、彼らが助けに表示例は、-SO標準出力に出力をリダイレクトするために使用されるが、そうするために、通常のファイルベースの入力が必要とされていることを示しているように見える。
他のヒント
ここでについてのスレッドでイゴールパブロフ(7Zの作者)、からいくつかの情報です"GZIP / bzip2のためのドロップイン置換として7zipを?"
のの提案は、基本的にxz
代用として7Zを使用することでした。ただ、xz
を使用して動作するはずですが、それはマルチスレッドではないかもしれない(と7Zがよい)。
のように7Zを使用しようとしているときます:
somecommand | 7zr a -si -so | nc -q 2 1.2.3.4 5678
イゴールパブロフはに述べています:
7zのA 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 - ジップ支援読書の現在のバージョンだけのため7Z、XZ、gzipとbzip2のアーカイブます。
あなたは 7zのダウンロードページの「コマンドラインバージョン」である、7za.exe
を使用する必要がありますに。私はあなたが現在7z.exe
を使用していることがわかり、私はそれは私も前に遭遇した問題だと確信しています。
実は、私はので、7zのは、私を与えていたトラブルの PeaZipするに切り替えると思います。 PeaZipが7zや他のいくつかの圧縮ユーティリティのラッパーで、PeaZipは少し良く、コマンド・ライン・インタフェースを備えています。
stdout
に7zip
配管時に私は同様の問題に遭遇した。
の代わりに直接Process
からコマンドを呼び出すのは、私はバッチファイルにコマンドを記述して、バッチファイルを実行します。それはハックですが、それは作業を行います。