Example #1
0
 protected override void _Unir(string fichero, string dirDest)
 {
     if (!File.Exists (fichero))
     {
         return;
     }
     FileInfo fi = new FileInfo (fichero);
     string destino = dirDest + Path.DirectorySeparatorChar + fi.Name.Substring (0, fi.Name.LastIndexOf ('.'));
     long datosTotales = fi.Length;
     FileStream input = File.OpenRead (fichero);
     LZMAInputStream lzmaInput = new LZMAInputStream (input);
     datosTotales = lzmaInput.UncompressedSize;
     Stream fos = UtilidadesFicheros.CreateWriter (destino);
     byte[] buffer = new byte[Consts.BUFFER_LENGTH];
     int leidos = 0;
     long transferidos = 0;
     OnProgress (0, datosTotales);
     while ((leidos = lzmaInput.Read (buffer, 0, buffer.Length)) > 0)
     {
         fos.Write (buffer, 0, leidos);
         transferidos += leidos;
         //OnProgress (input.Position, datosTotales);
         OnProgress (transferidos, datosTotales);
     }
     lzmaInput.Close ();
     fos.Close ();
 }
        public DebArchiveInputStream(Stream inputStream)
            : base(inputStream)
        {
            this.arIn = new ArArchiveInputStream (inputStream);

            ArArchiveEntry binary = arIn.GetNextArEntry ();
            if (!binary.Name.Equals ("debian-binary"))
            {
                // TODO Customize
                throw new IOException ("Invalid name, expected debian-binary, readed:" + binary.Name);
            }
            ArArchiveEntry control = arIn.GetNextArEntry ();
            if (!control.Name.Equals ("control.tar.gz"))
            {
                throw new IOException ("Invalid name, expected control.tar.gz, readed:" + control.Name);
            }
            ArArchiveEntry data = arIn.GetNextArEntry ();
            Stream compressedStream = null;
            if (data.Name.Equals ("data.tar.gz"))
            {
                compressedStream = new GZipStream (arIn, CompressionMode.Decompress);

            }
            else if (data.Name.Equals ("data.tar.bz2"))
            {
                compressedStream = new BZip2InputStream (arIn);
            }
            else if (data.Name.Equals ("data.tar.bz2"))
            {
                compressedStream = new LZMAInputStream (arIn);

            }
            else if (data.Name.Equals ("data.tar"))
            {
                compressedStream = arIn;
            }
            else
            {
                throw new IOException ("Unsupported compressed data:" + data.Name);
            }
            this.tarStream = new TarInputStream (compressedStream);
        }
        private void Init()
        {
            ReadRPMLead ();
            ReadRPMSignature ();
            ReadRPMHeader ();
            if (this.payloadSize > 0)
            {
                this.totalLength = this.Position + this.payloadSize;
            }

            long limitSize = this.inputStream.Length - this.inputStream.Position;
            Stream s = new SizeLimiterStream(this.inputStream,limitSize);
            switch (payloadCompressor)
            {
                case "gzip":
                    s = new GZipStream(s, CompressionMode.Decompress);
                    break;
                case "bzip2":
                    s = new BZip2InputStream (s);
                    break;
                case "lzma":
                    s = new LZMAInputStream(s);
                    break;
                default:
                    throw new IOException("Unsupported payload compression:" + payloadCompressor);
            }
            switch (payloadFormat){
                case "cpio":
                    cpioStream = new CpioArchiveInputStream(s);
                    break;
                default :
                    throw new IOException("Unsupported payload format:" + payloadFormat);
            }
        }
Example #4
0
        protected override void _Unir(string fichero, string dirDest)
        {
            if (!File.Exists (fichero)) {
                return;
            }
            FileInfo fi = new FileInfo (fichero);
            long datosTotales = fi.Length;
            long uncompressedSize = 0;
            FileStream input = File.OpenRead (fichero);
            Stream input2 = input;

            if (fichero.ToLower ().EndsWith (".bz2") || fichero.ToLower ().EndsWith (".tbz2") || fichero.ToLower ().EndsWith (".tbz"))
            {
                // No hay forma de saber el tamaño descomprimido de un bz2 de forma inmediata
                input2 = new BZip2InputStream (input);
            }
            else if (fichero.ToLower ().EndsWith (".gz") || fichero.ToLower ().EndsWith (".tgz"))
            {
                uncompressedSize = Dalle.Formatos.GZip.GZip.GetUncompressedSize (input);
                input2 = new GZipStream (input, CompressionMode.Decompress);
            }
            else if (fichero.ToLower ().EndsWith (".tar.lzma") || fichero.ToLower ().EndsWith ("tlz"))
            {
                input2 = new LZMAInputStream (input);
                uncompressedSize = ((LZMAInputStream)input2).UncompressedSize;
            }
            TarInputStream tarInput = new TarInputStream (input2);

            TarEntry tarEntry = null;
            byte[] buffer = new byte[Consts.BUFFER_LENGTH];
            OnProgress (0, 1);
            long transferidos = 0;
            while ((tarEntry = tarInput.GetNextEntry ()) != null)
            {
                // Tamaño de la cabecera de la entrada.
                // Nota: TarInputStream ignora sileciosamente algunas entradas,
                // por lo que el progreso no será totalmente preciso.
                transferidos += 512;
                if (tarEntry.IsDirectory)
                {
                    continue;
                }
                Stream entrada = new SizeLimiterStream (tarInput, tarEntry.Size);
                Stream salida = UtilidadesFicheros.CreateWriter (dirDest + Path.DirectorySeparatorChar + tarEntry.Name);

                int leidos = 0;

                while ((leidos = entrada.Read (buffer, 0, buffer.Length)) > 0)
                {
                    salida.Write (buffer, 0, leidos);
                    transferidos += leidos;
                    if (uncompressedSize > 0)
                    {
                        OnProgress (transferidos, uncompressedSize);
                    }
                    else {
                        OnProgress (input.Position, datosTotales);
                    }
                }
                salida.Close ();
                transferidos += 512 - (tarEntry.Size % 512);
            }
            tarInput.Close ();
            OnProgress (1, 1);
        }