/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Fusionar dos ficheros

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Iradedios



Registrado: 13 Ene 2012
Mensajes: 1

MensajePublicado: 14/01/2012 10:17 am
Título: Fusionar dos ficheros

Supongamos que quiero fusionar dos archivos:
a) Imagen en x formato
b) Cualquier archivo comprimido en un rar

De manera que al abrir la imagen de manera normal la muestre como siempre pero al "abrirla como winrar" se muestre el archivo que hay dentro.

Eso lo he conseguido con la siguiente instrucción:

Código:
system("copy /b a.jpg + b.rar fusion.jpg");


Cual seria su equivalente en codigo c? Manejando ficheros...
Por ahora lo que tengo implementado en código sería:

Código:

FILE *dir1;
FILE *dir2;
FILE *dir3;

void main()
{
   char f[10]="b.rar";
   char r[10]="a.jpg";
   char f2[10]="fusion.jpg";
   char leer[1023];

   dir1 = fopen(f,"rb");


   dir2 = fopen(r,"rb");


   dir3 = fopen(f2,"wb");

   while (f != EOF)
   {
      fread(&leer, sizeof(leer),1023,dir1);
      fwrite(&leer, sizeof(leer),1023,dir3);
   }

   

}



No tengo ni idea de como continuar ni si lo que he hecho hasta ahora es correcto, ¿podriais echarme una mano?


GRASIAS DE HANTEVRASO
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 6586
Ubicación: Mexico

MensajePublicado: 17/01/2012 6:35 pm
Título:

Para empezar faltan las directivas de inclusión y la función principal se debe definir como "int main(void) ...", entre otras cosas.

El programa no funcionara como esta ya que este condicional:
Código:
while (f != EOF) ...

Compara la dirección en memoria de "f" con el valor negativo EOF ... lo cual no es correcto.

La forma mas sencilla es abriendo cada uno de los archivos de entrada, por cada uno de ellos tomas sus caracteres y los envías al archivo de salida.

Un ejemplo de ello es (C estándar):
Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   FILE *entrada;
   FILE *salida;
   
   char *nom_entrada[] = {
      "primero.abc",
      "segundo.xyz"
   };
   size_t num_archivos = sizeof nom_entrada / sizeof nom_entrada[0];
   char *nom_salida = "salida.abc";
   
   size_t i;
   int ch;
   
   salida = fopen(nom_salida, "wb");
   for (i = 0; i < num_archivos; i++){
      entrada = fopen(nom_entrada[i], "rb");
     
      while ((ch = fgetc(entrada)) != EOF)
         fputc(ch, salida);
     
      fclose(entrada);
   }
   fclose(salida);
   
   return EXIT_SUCCESS;
}


Por simplicidad el programa no verifica los casos de error, eso lo puedes agregar una vez tengas el programa modificado funcionando correctamente.

Un saludo
_________________
Memory never recaptures reality. Memory reconstructs. All reconstructions change the original, becoming external frames of reference that inevitably fall short.
--
Mentat Handbook
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com