| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
NathanD
Registrado: 03 Oct 2012 Mensajes: 18
| Publicado: 25/02/2013 6:15 am | | | Título: Dividir un fichero en otros varios ficheros |
| Buenas, bueno pues después del anterior problema se me presenta éste. Quiero dividir un fichero en varias partes, por ejemplo:
fichero.txt -> fichero.txt.001, fichero.txt.002, fichero.txt.003, etc.
Donde estoy atascado es en dividir el contenido del primer fichero en los demás. Quiero decir, no sé cómo hacer para dividir, por ejemplo, la primera mitad en el primer fichero, y la segunda en el segundo.
El bucle principal del código que he hecho es éste, que en lugar de dividir el primer fichero, copia todo el contenido.
| Código: | for(i=0; i < num_partes; i++) { fichero_orig = fopen(fich_origen_nombre, "r"); strcpy(fich_dest_nombre, fich_origen_nombre); sprintf(buffer_nombre, ".00%i", i); strcat(fich_dest_nombre, buffer_nombre);
fichero_dest = fopen(fich_dest_nombre, "w"); while( ! feof(fichero_orig) ) { cantidad= fread( buffer, 1, sizeof(buffer), fichero_orig); fwrite( buffer, 1, cantidad, fichero_dest); } fclose(fichero_orig); } |
He probado varias cosas, pero nada.
Gracias de antemano y saludos. |
| | Volver arriba | |  | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 25/02/2013 11:18 am | | | Título: Re: Dividir un fichero en otros varios ficheros |
| | NathanD escribió: | Buenas, bueno pues después del anterior problema se me presenta éste. Quiero dividir un fichero en varias partes, por ejemplo:
fichero.txt -> fichero.txt.001, fichero.txt.002, fichero.txt.003, etc. |
Supongo que habrás querido decir
fichero.txt -> fichero.001.txt, fichero.002.txt, fichero.003.txt, etc.
ya que en caso contrario pierdes el "tipo" de fichero.
| Cita: | Donde estoy atascado es en dividir el contenido del primer fichero ........................
El bucle principal del código que he hecho es éste, que en lugar de dividir el primer fichero, copia todo el contenido. ........................................
|
Bueno, yo no soy experto ni en C ni en ficheros ni en nada, pero este código hace lo que pretendes:
| Código: | /* Copiador de ficheros a trozos en C*/
#include <stdio.h> #include <stdlib.h> #include <string.h>
int main() { FILE *fichOrg, *fichDest; /* Los dos ficheros */ char *buffer; /* El buffer para guardar lo que leo */ char nombreOrg[80], /* Los nombres de los ficheros */ nombreDest[80],nombreDest1[80],partes[80]; long longitud; /* Tamaño del fichero */ long cantidad; /* El número de bytes leídos */ int i,num_partes=4; /* Accedo al fichero de origen */ printf("Introduzca el nombre del fichero Origen: "); scanf("%s",nombreOrg); if ((fichOrg = fopen(nombreOrg, "rb")) == NULL) { printf("No existe el fichero origen!\n"); exit(1); } /* Y ahora al de destino */ printf("Introduzca el nombre del fichero Destino: "); scanf("%s",nombreDest); strcpy(nombreDest1, nombreDest);
if ((fichDest = fopen(nombreDest, "wb")) == NULL) { printf("No se ha podido crear el fichero destino!\n"); exit(2); } /* Miro la longitud del fichero de origen */ fseek(fichOrg, 0, SEEK_END); longitud = ftell(fichOrg); fseek(fichOrg, 0, SEEK_SET); if ((fichDest = fopen(nombreDest, "wb")) == NULL) { printf("No se ha podido crear el fichero destino!\n"); exit(2); } /* Reservo espacio para leer todo */ buffer = (char *) malloc (longitud); if (buffer == NULL) { printf("No se ha podido reservar tanto espacio!\n"); exit(3); }
for(i=0; i <num_partes; i++) { sprintf(partes, "00%i_", i); strcat(partes,nombreDest1 ); if ((fichDest = fopen(partes, "wb")) == NULL) { printf("No se ha podido crear el fichero destino!\n"); exit(4); } /* Leo una parte de los datos a la vez */ fseek(fichOrg, i*longitud/num_partes, SEEK_SET); cantidad = fread( buffer, 1, longitud/num_partes, fichOrg); /* Escribo tantos como haya leído */ fwrite(buffer, 1, cantidad, fichDest); if (cantidad != longitud/num_partes) printf("Cuidado: no se han leido (ni copiado) todos los datos\n"); strcpy(nombreDest1, nombreDest); } /* Cierro los ficheros */ fclose(fichOrg); fclose(fichDest); return 0; }
|
El secreto está, además de como crear las partes, en "situarse" en una posición y leer hasta ahí para posteriormente escribir y volver al punto dónde nos quedamos y volver a repetir el proceso. O sea, mírate bien la instrucción fseek que ya te había mencionado en el otro tema.
Saluditos!. .....
P.D: ¿Me puedes pasar vía "mp" la página de los emoticones?. Gracias. 
Ultima edición por leosan el 25/02/2013 2:41 pm; editado 1 vez |
| | Volver arriba | |  | NathanD
Registrado: 03 Oct 2012 Mensajes: 18
| Publicado: 25/02/2013 2:02 pm | | | Título: |
| Muchas gracias por todo leosan  |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |