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