Me gustaría encadenar varias operaciones de flujo (como descargar un archivo, descomprimirlo sobre la marcha y procesar los datos sin ningún archivo temporal). Los archivos están en formato 7z. Hay un SDK de LZMA disponible, pero me obliga a crear un flujo de salida externo en lugar de ser un flujo en sí mismo; en otras palabras, el flujo de salida deberá escribirse completamente antes de poder trabajar con él. Parece que a SevenZipSharp le falta esta funcionalidad.Tratamiento de archivos 7z como transmisiones .NET
¿Alguien ha hecho algo así?
// in pseudo-code - CompressedFileStream derives from Stream
foreach (CompressedFileStream f in SevenZip.UncompressFiles(Web.GetStreamFromWeb(url))
{
Console.WriteLine("Processing file {0}", f.Name);
ProcessStream(f); // further streaming, like decoding, processing, etc
}
Cada secuencia de archivo se comportaría como una lectura corriente una vez que representa un archivo, y llamar a MoveNext() en la corriente principal comprimido invalidaría automáticamente & omitir ese archivo.
Se pueden realizar construcciones similares para la compresión. Ejemplo de uso: realice una agregación en una gran cantidad de datos: para cada archivo 7z en un directorio, para cada archivo interno, para cada línea de datos en cada archivo, resuma algún valor.
ACTUALIZACIÓN 2012-01-06
#ziplib (SharpZipLib) ya lo hace exactamente lo que necesito para archivos zip con la ZipInputStream
clase. Aquí hay un ejemplo que produce todos los archivos como transmisiones no insertables dentro de un archivo zip dado. Todavía estoy buscando la solución 7z.
IEnumerable<Stream> UnZipStream(Stream stream)
{
using (var zipStream = new ZipInputStream(stream))
{
ZipEntry entry;
while ((entry = zipStream.GetNextEntry()) != null)
if (entry.IsFile)
yield return zipStream;
}
}
No estoy seguro de entender lo que quiere decir con los límites de palabra/línea. El objeto 'CompressedFileStream' se devuelve en el momento en que SevenZip recibe el encabezado del archivo de la transmisión, no después de obtener todo el archivo. La lectura de los datos del archivo descomprimido también hace que la secuencia fuente avance. – Yurik