Foros del Web » Programación para mayores de 30 ;) » C/C++ »

dividir un archivo binario en 3

Estas en el tema de dividir un archivo binario en 3 en el foro de C/C++ en Foros del Web. Hola gente una pregunta, en el enunciado dice "que divida en tres nuevos archivos binarios (<"archal1">, <"archal2"> y <"archal3">) el archivo anterior, tomado los primeros ...
  #1 (permalink)  
Antiguo 23/02/2015, 07:29
 
Fecha de Ingreso: junio-2013
Mensajes: 20
Antigüedad: 10 años, 10 meses
Puntos: 0
dividir un archivo binario en 3

Hola gente una pregunta, en el enunciado dice "que divida en tres nuevos archivos binarios (<"archal1">, <"archal2"> y
<"archal3">) el archivo anterior, tomado los primeros 30 para el primer archivo, los
siguientes 30 para el segundo y los restantes para el tercero."
Yo pense hacer lo con:



fseek(pf,29,0)

//va del principio a la posicion 29


fseek(pf,51,1)

//de la posicion actual a la 59
Código:

fseek(pf,60,2)

//de la 60 hasta que termine el archivo
tengo duda para grabar los demas archivos, como hago? están bien los fseek?
de base voy a usar la siguiente codificacion:


Código:
Código:
#‎include‬ <stdio.h>
#include <stdlib.h>
‪#‎define‬ MSG 1

int abrir_archivo (FILE**, char *, char *, int);
void mostrarReg(vect);

int main(void)
{
int i;
int vect;
FILE *archi;
archi=fopen("archalea.dat","w+b");
if(!archi)
{
puts("imposible abrir archivo");
}
else
{
 printf("90 numeros aleatorios del 0 al 99\n\n");
 for(i=0; i<89; i++)
 {
    vect=rand() % 1000;
   fwrite(&vect,sizeof(vect),1,archi);
 }
fclose(archi);

archi=fopen("archalea.dat","r+b");
if(archi)
{
int conta=0;
while (!feof(archi))
{

printf("\n posicion= %d Numero : %d", conta+1,vect);
conta++;
fread(&vect, sizeof(vect),1, archi);
//acá tengo que poner los fseek?
}
}
else
{
puts("imposible abrir archivo");
}

}
close(archi);
printf("\n");
return 0;
}
  #2 (permalink)  
Antiguo 23/02/2015, 17:15
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 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

Etiquetas: binario, char, dividir, int, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:51.