No es capaz de utilizar 7-Zip para comprimir la entrada estándar y salida con la salida estándar?

StackOverflow https://stackoverflow.com/questions/1287383

  •  18-09-2019
  •  | 
  •  

Pregunta

Me sale el error "No implementado".

Quiero comprimir un archivo usando 7-Zip a través de la entrada estándar a continuación, tomar la datos a través de la salida estándar y hacer más conversiones con mi solicitud. En la página hombre que muestra este ejemplo:

% echo foo | 7z un maniquí -tgzip -si -así> / dev / null

Estoy utilizando Windows y C #.

Resultados:

7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
Creating archive StdOut

System error:
Not implemented

Código:

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();
}

¿Hay alguna otra forma sencilla de leer el archivo en la memoria?

En este momento puedo 1) escribir en un archivo temporal y leer (fácil y puedo copiar / pegar algo de código) 2) utilizar una tubería de archivo (medio? Nunca he hecho) 3) Algo más.

¿Fue útil?

Solución

Es posible que desee probar algo así como SevenZipSharp http://www.codeplex.com/sevenzipsharp, nunca he utilizado personalmente, sino que proporciona un envoltorio a la biblioteca COM 7za.dll que puede ser útil para usted.

He escrito utilidades que utilizar 7-Zip a través de un proceso de mí mismo y no han tenido problemas aunque nunca he tratado de hacer entrada y salida estándar cosas. En los archivos de ayuda que tengo con mi versión de 7-Zip la página en los estados de conmutación -SI:

  

Nota:. La versión actual de 7-Zip no soporta la lectura de los archivos de la entrada estándar

Nota seguro de si esto podría ser el origen del problema, con la especificación de los dos interruptores que podría ser confuso 7-Zip.

Los ejemplos que muestran en la ayuda parecen demostrar que -así se usa para redirigir la salida a la salida estándar, pero requiere entradas basadas en archivos normales para hacerlo.

Otros consejos

Aquí hay algo de información de Igor Pavlov (autor de 7z), en un hilo sobre "7zip como una gota en el reemplazo de gzip / bzip2?"

La sugerencia era utilizar básicamente 7z como un sustituto xz. Sólo utilizando xz debería funcionar, pero puede que no sea multi-hilo (y 7z puede ser).

Al intentar utilizar 7z como en:

somecommand | 7zr a -si -so | nc -q 2 1.2.3.4 5678

Igor Pavlov dice :

  

7z un a.7z -así
  y
  7z e a.7z -si
  no puede ser implementado algunas. desde .7z formato requiere   "Seek" operación.

     

Usar formato XZ lugar:
  7z un archivo a.xz
  debe ser compatible con todos los modos.

Y

  

7-Zip piensa que necesita el nombre de archivo.
  Para que pueda especificar algunos   nombre de archivo como a.xz
  o
  especifique interruptor -an.

La solución final fue:

cat foo.txt | 7za a -an -txz -bd -si -so | dd of=foo.xz

Un informe de error sugiere que esto debe estar en la ayuda:

  

La versión actual de la lectura de apoyo 7-Zip de los archivos de entrada estándar sólo para archivos xz, LZMA, tar, gzip y bzip2, y la adición de archivos de entrada estándar sólo para 7z, XZ, archivos gzip y bzip2.

Es posible que necesite usar 7za.exe, que es la "versión de comandos" en la href="http://www.7-zip.org/download.html" rel="nofollow noreferrer"> 7z página de descarga . Veo que está utilizando actualmente 7z.exe, y estoy bastante seguro de que es un problema que he encontrado antes también.


En realidad, creo que me pasa a
PeaZip debido a los problemas 7z me estaba dando. PeaZip es una envoltura alrededor de 7z y algunas otras utilidades de compresión, y PeaZip tiene un poco mejor interfaz de línea de comandos.

me encontré con un problema similar cuando las tuberías stdout en 7zip

En lugar de invocar el comando desde Process directamente, escribo el comando a un archivo por lotes y ejecute el archivo por lotes. Es un truco, pero funciona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top