Big File Splitter

D@rkbytes

Moderador general
Como últimamente me he visto en la necesidad de trabajar con archivos de gran tamaño, se me ocurrió crear una aplicación independiente.
Esta aplicación sirve para dividir archivos muy grandes, del orden de los Gigabytes.
Estuve buscando por Internet algo que lo pudiera hacer pero no lo encontré, daban error al superar los 2 Gigabytes.
Entendiendo el motivo, me dispuse a crear rutinas basadas en API de Windows que pudieran solventar ese problema.
Y es que el problema no vienen siendo la longitud de la variables, sino el tamaño del búfer de lectura y escritura.
Actualmente ya todos debemos estar usando sistemas basados en procesadores de 64 bits, así que esta aplicación viene bien al procesar archivos muy grandes.

No ha sido probada en sistemas x86, pero seguramente se puedan presentar problemas de incompatibilidad.
Así que recomiendo que solo sea usada en sistemas de 64 bits.
La aplicación es x86 pero usa API's del sistema x64, por ese motivo no se recomienda usarla en x86

Su uso es muy simple y desde la carga del archivo, esta se encarga de proporcionar los datos posteriores.
Datos que se pueden modificar a gusto y preferencias propias.
Por ejemplo:
BFS_001.png
En esta imagen se muestra que el programa ya definió una carpeta de salida para los archivos.
También eligió un nombre por defecto para cada parte.
Y decidió que cada archivo será dividido en partes de 100 MB.
Este proceso es automático y puede ser modificado a gusto.

Para volver a unir los archivos se debe usar la segunda parte del programa.
Aquí solo basta con seleccionar el archivo de proyecto *.spl y el programa unirá todos los archivos reconstruyendo al original.

Como siempre, espero que esta aplicación les sea de utilidad.
Recuerden comentar sus opiniones y cualquier error que la aplicación pueda llegar a tener para su pronta corrección.
 

Adjuntos

  • Big File Splitter.rar
    41.1 KB · Visitas: 15
Recuerdo que habia un programa llamado "hacha", o algo asi que servia para dividir archivos, pero desconozco las limitaciones.

Lo encuentran en la web oficial: Dr. Software | Home

La version "net" dice que es para cortar "archivos realmente grandes", la version vieja soportaba 2GB.
 
Sí, de hecho el problema con esos programas es la limitación a 2 GB.
Busqué y busqué pero nada funcionó.
Snap3.png
Ante eso, ni para qué arriesgarse.

Problema resuelto con este programa. :)

Dejo el corazón de esta aplicación:
C++:
    while (1)
    {
        long fl;

        fl = fread(fb, 1, (int) chunk, fp);
        if (fl > 0)
        {
            part++;
            sprintf(splitfn, "%s.%01ld", nfn, part);
            op = fopen(splitfn, "wb");

            printf("Procesando el archivo %s.%01ld\n", nfn, part);
 
            if (op == NULL)
            {
                fprintf(stderr, "No se pudo crear el archivo %s\n", splitfn);
                return 2;
            }
            fwrite(fb, 1, (int) fl, op);
            fclose(op);
        }
        else
            break;
    }
    if (fp != stdin)
        fclose(fp);
   
    printf("Proceso completado satisfactoriamente.\n");
    printf("Se obtuvieron %01ld partes.", part);
    return 0;    // Sin errores.
}
 
Última edición:
Recuerdo que habia un programa llamado "hacha", o algo asi que servia para dividir archivos, pero desconozco las limitaciones.

Lo encuentran en la web oficial: Dr. Software | Home

La version "net" dice que es para cortar "archivos realmente grandes", la version vieja soportaba 2GB.
Sí, lo he usado y mucho pero en la década de los 90 para fraccionar en partes la información "grande" para aquella época que tenia que pasar(forwarding) desde mi BBS de radio a 1200bps en Paket Radio.

Funcionaba muy bien pero claro en aquella época, 2GB solo se soñaba, no era real! :)
 
Última edición:
Para los que gustan del modo consola, adjunto el programa compilado. (32 KB)

Uso: splitter [<nombre_archivo>] [<nombre_salida>] [trozo (en Kb)]
Todos los argumentos son requeridos.

Ejemplo:
Splitter CMD.png
Aquí se procesó un archivo de 160 MB en partes de 10 MB. (10240 bytes = 10 Megabytes)
El proceso no tardó ni dos segundos.

Vamos por algo grande. :)
Properties.png

Splitter CMD_002.png

Snap5.png
De 7.28 GB a 15 partes de 500 MB. (512000 KB = 500 MB)

Nota: el cmd.exe de Windows se ejecuta en la carpeta seleccionada con tan solo escribir cmd en la barra de direcciones y presionar Intro/Enter.
 

Adjuntos

  • Splitter.rar
    14.1 KB · Visitas: 12
Actualización v1.1.0

En esta versión ahora se puede ver el estado y el progreso de la división del archivo.
Anteriormente esto no se mostraba ya que el proceso era externo, ahora lo hice internamente.
Con esto también se logró reducir el tamaño del programa.
BFSv1.1.png
 

Adjuntos

  • Big File Splitter v1.1.0.rar
    27.3 KB · Visitas: 14
Sí, lo he usado y mucho pero en la década de los 90 para fraccionar en partes la información "grande" para aquella época que tenia que pasar(forwarding) desde mi BBS de radio a 1200bps en Paket Radio.

Funcionaba muy bien pero claro en aquella época, 2GB solo se soñaba, no era real! :)
Te acordás si el ARJ sólo comprimía paquetes de 1.44M...???

Lo usaba en esa época junto con ACE y otros más, y creo que lo tengo junto con el NORTON COMMANDER en algún disquete...todo para DOS claro.
 
Te acordás si el ARJ sólo comprimía paquetes de 1.44M...???

Lo usaba en esa época junto con ACE y otros más, y creo que lo tengo junto con el NORTON COMMANDER en algún disquete...todo para DOS claro.
OFF-TOPIC

Comprimía volúmenes de hasta 1.44Mb.

Generalmente los archivos que circulaban en el "Forwarding" del BBS eran en partes del 7Zip pero mucho mas chicos que 1.44Mb que era un tamaño que a 1200bps que trabajábamos nosotros en la red era "muy grande" de pasar.

Teníamos "ventanas de propagación" casi todos los días ya que los saltos eran de 60Km y hasta 90Km con alturas bajas para tales distancias y potencias/antenas "posibles" en banda de dos metros.

En mi caso atendía al menos el trafico de tres BBS que por la posición geográfica eran la salida a distintos puntos cardinales pero a veces se sumaban estaciones fijas por operador que "navegaban/descargaban" archivos y datos del BBS ya que también tenia un Nodo en un punto estratégico con altura privilegiada que permitía aumentar la cobertura pese a su baja potencia.
 
.

Sigo Off Topic ON

A principios de los 90's en el trabajo había un técnico radioaficionado que andaba con esos BBS !!!!!

Siempre lo llamábamos Fito por su parecido al cantante, ahora no recuerdo su licencia, pero varias veces en una imprenta próxima a mi casa le encargaba las QSL !!!


Off Topic Off


.
 
Splitter, ejecutable y código fuente en C#

Programa realizado en VS C# modo consola, tan ligero como 6.5 KB pero tan eficaz que dividirá archivos de gran tamaño de forma muy rápida. :cool:
Como base podrán usar .Net 4.0

Creo que ahora tendré que hacer el Joiner en modo consola, eso es más sencillo. 😄
 

Adjuntos

  • Executable.rar
    2.9 KB · Visitas: 6
  • Source.rar
    1.1 KB · Visitas: 7
Splitter y Joiner (Modo Consola)

Para escribir el programa del Joiner tuve que modificar un poco el programa del Splitter.
Esto con el motivo de que el Joiner tuviera un archivo de proyecto del cual extraer información para unir los archivos.
Básicamente así lo hace la aplicación de Windows Forms, pero estos programas son en modo consola.

Yo quiero suponer que a estas fechas, cualquiera sabe ingresar a un programa de consola y proporcionarle argumentos, pero por si no, explico los argumentos requeridos para ambos programas.
Para ejecutar un programa de consola se debe usar el PowerShell o el CMD de Windows.
Se abre el explorador dentro de la carpeta o unidad donde se encuentre el programa, y en la barra de direcciones se escribe: cmd
Esto direccionará al programa que tengamos seleccionado por defecto (PowerShell o CMD) a la carpeta o unidad del programa de consola.
Con esto nos evitamos el uso del comando CD ruta

Para el caso del programa Splitter, los argumentos o línea de comandos, serían así:
Splitter_CommandLine.png
Argumento 1: Enmarcado en rojo = Nombre del programa a ejecutar, puede escribirse sin la extensión si es un archivo .exe
Argumento 2: Enmarcado en azul = Nombre del archivo a dividir. (Ruta completa del archivo, a menos de que ambos se encuentren en el mismo directorio o unidad)
Argumento 3: Enmarcado en amarillo = Nombre para los archivos que serán creados tras la división. (Si le ponen extensión será omitida)
Argumento 4: Enmarcado en rosa = Tamaño del trozo (Chunk) en MB al que será dividido el archivo.
En este ejemplo se selecciona el archivo "app.lz4", se le da por nombre a los archivos como: "splitted" y se asignan 2 Megabytes por archivo.

El resultado se puede ver en la imagen de arriba.

Argumentos para el Joiner:
Joiner_CommandLine.png
Este consta de tres argumentos para la línea de comandos.
Argumento 1: Enmarcado en rojo = Nombre del programa a ejecutar, puede escribirse sin la extensión si es un archivo .exe
Argumento 2: Enmarcado el azul = Nombre del archivo de proyecto generado por Splitter.exe
Argumento 3: Enmarcado en amarillo = Nombre que tendrá el archivo después de la unión. (Si existe será eliminado)

Aquí se procesó un archivo de 15 MB fraccionado en partes de 2 MB, el proceso es tan rápido que por eso se muestra 00:00
Tendría que agregar los milisegundos, pero como originalmente lo pensé para archivos del orden de los GB, no lo agregué.

Pues sería todo, adjunto los dos proyectos en un solo archivo.

Edit:
Correcciones para el Joiner:

1.- Se agregó la comprobación de existencia de archivos.
2.- Se agregó mostrar los milisegundos en el proceso.

Nota: El Timer Stopwatch también se puede agregar al Splitter.

Obviamente, para aplicaciones más elaboradas se requieren más comprobaciones.
Estos ejemplos solo son la base para ello y demuestran lo potente, versátil y sencillo que es programar en C#

Results.png
 

Adjuntos

  • Splitter & Joiner.rar
    8.2 KB · Visitas: 5
  • Joiner_new.rar
    4.1 KB · Visitas: 4
Por cuestiones de seguridad, por si crashea, si se apaga, cierra la ventana el usuario o lo que sea, la parte de eliminar los trozos dejalo a lo último, y NO trozo por trozo...

Despues agrego algunas cositas para enriquecer el programa...
 
Dejo por acá la versión "V1.2" modificada y unificada por mi del Splitter & Joiner iniciado por Dark.

Si abren solo el archivo, verán el uso y un ejemplo de cada uno.

No he realizado ninguna prueba exhaustiva, ya que simplemente tomé los archivos compartidos por Dark y los unifiqué en un único.

Ventajas:
- Un solo archivo para ambas operaciones.
- Solo necesitan arrastrar el archivo a trocear o el archivo "*.spl" a unir, y nada mas.
- Pueden especificar el nombre de salida de cada operación, sea trocear o unir.
- Pueden elegir si quieren elegir el tamaño del trozo en MB, o no especificarlo (por defecto es 1MB por cuestiones de seguridad).
- Pueden especificar con el comando "/E" la eliminación de los trozos y del archivo de proyecto "*.spl" luego de unir.
- El ejecutable pesa unos 10kB.

Desventajas:
- No lo probé mucho ni con archivos grandes, así que no puedo asegurar su correcto funcionamiento.
- No sé que mas...

Usé Visual Studio 2012 con lenguaje C#.

Mas tarde subo un archivo "*.reg" para que quede en el menú contextual, y si dicen que "si", armo un instalador.

IMPORTANTE:
Está totalmente prohibido eliminar los nombres de Digitek (D@rkbytes) y TX3, SoftW. (yo).
 

Adjuntos

  • SplitterYJoinerFdE.zip
    7 KB · Visitas: 1
Agrego otras modificaciones:
- Se puede autoinstalar en "C:/XPLINER/Xpliner.exe" (Mas adelante el proceso).
- Cambiado de "*.spl" a "*.xplnr" el archivo de configuración.
- Agregado el menú contextual para directamente dividir (inicia con 1MB por trozo).
- Agregado doble clic en el archivo "*.xplnr" para unir las partes.
- Se guarda el nombre original para que al unir quede exacto como estaba.
- Actualizado los iconos, y agregado el icono del archivo de configuración.

Proceso de instalación:
- Desde donde tengan el archivo descargado y descomprimido, abran el CMD en modo Administrador (IMPORTANTE).
- Escriban en la línea de comandos los siguiente: Xpliner /I
-- donde el "/I" es una "i" mayúscula de Instalación.
- Se genera una carpeta en el disco C: en "C:/XPLINER/Xpliner.exe", junto al ícono "project.ico".
- Se agrega las claves para el menú contextual, los íconos y demás al registro del Windows.

Por favor, prueben y comenten si hay errores...
 

Adjuntos

  • XPLINER.zip
    63.8 KB · Visitas: 4
Atrás
Arriba