Tengo un archivo comprimido que tiene un tamaño de varios GB, quiero obtener el tamaño de los contenidos descomprimidos pero no quiero descomprimir realmente el archivo en C#, lo que podría ser la biblioteca que puedo usar ? Cuando hago clic con el botón secundario en el archivo .gz y voy a Propiedades, debajo de la pestaña Archive
aparece el nombre de propiedad TotalLength
que muestra este valor. Pero quiero obtenerlo programáticamente usando C# ... ¿Alguna idea?Archivo GZIP Longitud total en C#
Respuesta
Los últimos 4 bytes del archivo gz contiene la longitud.
Por lo tanto, debe ser algo como:
using(var fs = File.OpenRead(path))
{
fs.Position = fs.Length - 4;
var b = new byte[4];
fs.Read(b, 0, 4);
uint length = BitConverter.ToUInt32(b, 0);
Console.WriteLine(length);
}
ah, mucho mejor; No estoy seguro de cómo se maneja esto cuando> 4GB aunque –
Gracias Leppie ... en realidad, en mi caso el archivo será de menos de 4 GB ... Gracias por su ayuda ... –
@johnnyrose: Gracias por la corrección de errores tipográficos: D – leppie
public static long mGetFileLength(string strFilePath)
{
if (!string.IsNullOrEmpty(strFilePath))
{
System.IO.FileInfo info = new System.IO.FileInfo(strFilePath);
return info.Length;
}
return 0;
}
EDIT: Vea las respuestas de Leppie y Gabe; la única razón por la que estoy teniendo esto (en lugar de eliminarlo) es que puede ser necesario si se sospecha que la longitud es> 4 GB
Para gzip, que los datos no parecen estar directamente disponible - I He visto GZipStream
y el equivalente SharpZipLib - ninguno funciona. Lo mejor que puedo sugerir es para ejecutarlo localmente:
long length = 0;
using(var fs = File.OpenRead(path))
using (var gzip = new GZipStream(fs, CompressionMode.Decompress)) {
var buffer = new byte[10240];
int count;
while ((count = gzip.Read(buffer, 0, buffer.Length)) > 0) {
length += count;
}
}
Si se trata de una cremallera, entonces SharpZipLib:
long size = 0;
using(var zip = new ZipFile(path)) {
foreach (ZipEntry entry in zip) {
size += entry.Size;
}
}
Gracias Marc, el primer método funcionó para mí ... pero está tardando mucho en calcular un archivo sin comprimir de 2 GB ... y debería serlo mientras estamos contando en bucle ... ¿No hay alguna manera rápida? –
@Ummar: Tanto Gabe como yo explicamos la forma "correcta" de hacer esto. La forma anterior funcionará, pero imagínese usarla en miles de archivos de 2GB, llevará una eternidad. – leppie
@Ummar - vea la respuesta de @ leppie –
El último de bytes de un archivo .gz son el tamaño de módulo de entrada sin comprimir 2^32. Si su archivo descomprimido no es más grande que 4GB, simplemente lea los últimos 4 bytes del archivo. Si tiene un archivo más grande, no estoy seguro de que sea posible obtenerlo sin descomprimir la transmisión.
- 1. descompresión GZIP C# OutOfMemory
- 2. GZIP un archivo en Python
- 3. GZip cada archivo por separado
- 4. Couting de caracteres, palabras, longitud de las palabras y longitud total en una oración
- 5. Longitud total de la lista al usar struts 2 etiqueta
- 6. Cómo descomprimir GZip en Stream (C#)?
- 7. Contar número total de XmlNodes en C#
- 8. GZip en android
- 9. Heroku empuje: gzip no entrada estándar en formato gzip
- 10. archivo gzip con varios archivos dentro de
- 11. Recuperar el número total de líneas en un archivo
- 12. Cómo determinar la longitud del contenido de un archivo descomprimido?
- 13. ¿Cómo comprobar si un archivo está comprimido gzip?
- 14. Descomprime un archivo gzip de CURL, en php
- 15. Descargar, extraer y leer un archivo gzip en Python
- 16. ¿Puedo usar un archivo gzip abierto con Popen en Python?
- 17. añadiendo GZIP de servicio WCF REST en C#
- 18. Descomprimir GZip en Haskell
- 19. Descomprimir cadena GZip en Java
- 20. Capistrano gzip: stdin: interrupción inesperada al final del archivo
- 21. Manejar enteros de longitud arbitraria en C++
- 22. PHP: ¿cuál es la longitud total de una variable global de publicación?
- 23. safari y gzip
- 24. iPhone y gzip
- 25. Archivos comprimidos Hadoop gzip
- 26. Cómo descomprimir un archivo gzip y escribirlo en un archivo descomprimido, en el iPhone
- 27. Encontrar la longitud de un archivo MP3
- 28. RAM total en iPhone
- 29. ¿Cómo habilitar gzip?
- 30. cadena [longitud()] en C++, ¿está bien?
La información puede estar presente en el encabezado gzip. Pero no puedo ayudar más que eso. – leppie