2

「実装されていません」というエラーが表示されます。

stdin を介して7-Zipを使用してファイルを圧縮し、stdout を介してデータを取得し、アプリケーションでさらに変換を行いたいと考えています。man ページでは、次の例を示しています。

% エコー フー | 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) 他の何か。

4

4 に答える 4

4

SevenZipSharp http://www.codeplex.com/sevenzipsharpのようなものを試してみることをお勧めします。個人的には使用したことがありませんが、7za.dll COM ライブラリへのラッパーが提供されているので、役に立つかもしれません。

私は自分でプロセスを介して 7-Zip を利用するユーティリティを作成しましたが、StdIn や StdOut を試したことはありませんが、問題はありませんでした。私のバージョンの 7-Zip のヘルプ ファイルでは、-si スイッチのページに次のように記載されています。

注: 7-Zip の現在のバージョンは、stdin からのアーカイブの読み取りをサポートしていません。

これが問題の原因であるかどうかを確認してください。両方のスイッチを指定すると、7-Zip が混乱する可能性があります。

ヘルプに表示されている例は、出力を標準出力にリダイレクトするために -so が使用されていることを示しているようですが、そうするには通常のファイルベースの入力が必要です。

于 2009-08-17T13:02:27.033 に答える
1

これは、 「gzip/bzip2 のドロップイン代替としての 7zip?」に関するスレッドで、Igor Pavlov (7z の作成者) からの情報です。

xz提案は、基本的にサロゲートとして 7z を使用することでした。を使用するだけで動作する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

バグレポートは、これが助けになることを示唆しています:

7-Zip の現在のバージョンは、xz、lzma、tar、gzip、および bzip2 アーカイブの標準入力からのアーカイブの読み取りと、7z、xz、gzip、および bzip2 アーカイブの標準入力からのファイルの追加のみをサポートしています。

于 2016-04-25T20:47:56.347 に答える
0

stdoutにパイプするときに同様の問題に遭遇しました7zip

コマンドを直接呼び出す代わりにProcess、コマンドをバッチ ファイルに書き込んでから、バッチ ファイルを実行します。これはハックですが、機能します。

于 2015-06-18T15:46:58.913 に答える
0

7z ダウンロード ページ7za.exeの「コマンドライン バージョン」であるを使用する必要がある場合があります。私はあなたが現在 を使用していることを知りました。それは私が以前に遭遇した問題でもあると確信しています。 7z.exe


実は、 7z のトラブルでPeaZip に乗り換えたのだと思います。PeaZip は、7z およびその他のいくつかの圧縮ユーティリティのラッパーであり、PeaZip のコマンド ライン インターフェイスは少し優れています。

于 2009-08-17T11:29:25.127 に答える