| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Iradedios
Registrado: 13 Ene 2012 Mensajes: 1
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |