Pregunta

En mi aplicación, el usuario selecciona un archivo grande (> 100 MB) en su unidad. Deseo que el programa tome el archivo que fue seleccionado y Pícarlo en partes archivadas que son 100 MB o menos. ¿Cómo se puede hacer esto? Qué bibliotecas y archivo formato ¿Debería usar? ¿Podrías darme algún código de muestra? Después de crear la primera parte archivada de 100 MB, la voy a subir a un servidor, luego cargaré la siguiente parte de 100 MB, y así sucesivamente hasta que la carga esté terminada. Después de eso, desde otra computadora, descargaré todas estas partes archivadas, y luego deseo Conéctalos en el archivo original. ¿Es esto posible con las bibliotecas 7zip, por ejemplo? ¡Gracias!

ACTUALIZAR: Desde la primera respuesta, creo que voy a usar Seedzipsharp, y creo que ahora entiendo cómo dividir un archivo en piezas archivadas de 100 MB, pero todavía tengo dos preguntas:

  1. ¿Es posible crear la primera parte archivada de 100 MB y subirla antes de crear la siguiente parte de 100 MB?
  2. ¿Cómo se extrae un archivo con SeedzipSharp de múltiples archivos divididos?

Actualización #2: Estaba jugando con la GUI de 7 ZIP y creando archivos de volumen múltiple/división, y descubrí que seleccionar el primero y extraer de él extraerá todo el archivo de todos los archivos divididos. Esto me lleva a creer que los caminos a las partes posteriores están incluidos en el primero (¿o es consecutivo?). Sin embargo, no estoy seguro de si esto funcionaría directamente desde la consola, pero lo intentaré ahora y veré si resuelve la pregunta #2 de la primera actualización.

¿Fue útil?

Solución

Echa un vistazo a Sevenzipsharp, puede usar esto para crear sus archivos Spit 7Z, hacer lo que quiera cargarlos, luego extraerlos en el lado del servidor.

Para dividir el archivo mira el SevenZipCompressor.CustomParameters Miembro, pasando en "V100M". (Puede encontrar más parámetros en el archivo 7-zip.chm de 7zip)

Otros consejos

Puede dividir los datos en "paquetes" de 100 MB primero, y luego pasar cada paquete al compresor a su vez, fingiendo que son solo archivos separados.

Sin embargo, este tipo de compresión suele estar basado en la corriente. Mientras la biblioteca que esté utilizando hará su E/S a través de una clase derivada de la transmisión, sería bastante simple implementar su propia transmisión que "empaquete" los datos de cualquier forma que desee en la mosca, a medida que se transmiten los datos. Su método Write () lo escribe en un archivo. Cuando supera los 100 MB en ese archivo, simplemente cierre ese archivo y abre uno nuevo y continúa escribiendo.

Cualquiera de estos enfoques le permitiría cargar fácilmente un "paquete" mientras continúa comprimiendo el siguiente.

editar

Solo para ser claros: la descompresión es solo la secuencia inversa de lo anterior, por lo que una vez que funcione el código de compresión, la descompresión será fácil.

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