Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/02/2015, 17:15
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: dividir un archivo binario en 3

Es eso?
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int main (){
  6.     int array[30] = {10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
  7.     int n, i;
  8.     //4 punteros a file. Nos viene bien para trabajar con bucles y hacer mas pequeño el código XD
  9.     FILE *f[4];
  10.    
  11.     //abrimos el fichero que vamos a leer
  12.     if ( (f[0] = fopen( "fichero.dat", "w+b" )) == 0 ){ // atento a los modos de apertura W+b destruye el anterior archivo al sobreescribirlo. La b es de binario y la plus(+) añade la opcion de lectura, pero al escribir debemos volver al principio con rewind() o fseek()
  13.         printf ("fichero.dat no se abrio");
  14.     }
  15.     //guardare los enteros de arriba en el archivo binario del contrario no hay nada que leer. XD
  16.     fwrite(array, sizeof(array[0]), 30, f[0]);
  17.    
  18.    
  19.     char archivo[12];
  20.     char indice = '1';
  21.    
  22.     //volvemos a poner el puntero al inicio
  23.     rewind(f[0]);
  24.     for ( i = 1; i < 4; i++ ) {
  25.         //leemos 10 enteros desde el primer fichero
  26.         fread ( array, sizeof ( array[0] ), 10, f[0] );
  27.        
  28.         //preparamos el txto que va tener cada fichero
  29.         sprintf (archivo,"%s%c%s", "archal", indice++, ".dat" ); //sprintf funciona como printf pero envia el texto a una cadena de caracteres en vez de la pantalla. junta 3 cosas en una sola cadena que será el nombre de los 3 archivos.
  30.        
  31.         //abrimos el fichero con el nombre que montamos con sprintf
  32.         if ( ( f[i] = fopen ( archivo, "w+b" ) ) == 0 ) {
  33.             printf ( "archal%d.dat no se abrio", i+48 );
  34.         }
  35.        
  36.         //guardamos el texto en elfichero
  37.         fwrite ( array, sizeof ( array[0] ), 10, f[i] );
  38.     }
  39.    
  40.     //La prueba de que estan aqui:
  41.     for ( i = 1; i < 4; i++ ){
  42.         rewind(f[i]); //volvemos los punteros  de cada archivo al principio antes de leer
  43.         fread(array, sizeof( array[0] ), 10, f[i]); //leemos 10 enteros de cada un de los nuevos ficheros que creamos
  44.        
  45.         //Imprimimos
  46.         n = 0;
  47.         printf("Archivo %d: %d", i, array[n]);
  48.         for (n++; n < 10; n++ ){
  49.             printf(", %d", array[n]);
  50.         }
  51.         printf("\n\n");
  52.     }    
  53.  
  54.     //cerramos todos los archivos abiertos XD
  55.     fclose(f[0]);
  56.     fclose(f[1]);
  57.     fclose(f[2]);
  58.     fclose(f[3]);
  59.  
  60.     // ya ta ¬(°_o)/¯
  61.     getchar();
  62.     return 0;
  63. }

Para leer mas sobre las funciones: http://www.c.conclase.net/ficheros/?cap=002