C/Visual C - comparar dos ficheros

   
Vista:
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 02/03/2014 02:11:46
Saludos a todos,

Tengo dos ficheros TXT. Necesito un código en C que compare el contenido de los dos ficheros TXT. Si la comparación da como resultado que los dos ficheros TXT tienen el mismo contenido, que arranque un ejecutable (EXE). Si la comparación da como resultado que los dos ficheros TXT no tienen el mismo contenido, que salte algun mensaje del tipo "No se puede iniciar EJEMPLO.EXE, pulsa una tecla para continuar" y se acabó.

Como puedo hacer esto?

Saludos y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

comparar dos ficheros

Publicado por Pico (37 intervenciones) el 02/03/2014 07:27:38
¿Cómo puedes hacr qué?

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Manejo_de_archivos

Eso lee un fichero caráter a carácter. Leer dos ficheros es hacer eso mismo con otro.
Se compara un carácter leído con otro con ==. Se lanza un ejecutable con system.

http://c.conclase.net/librerias/?ansifun=system
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 02/03/2014 11:20:17
No se debería leer byte a byte para evitar carácteres "ocultos"?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 02/03/2014 12:14:31
La cosa es que no tengo ni idea de C compañero, por eso preguntaba que como puedo hacer lo que busco

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comparar dos ficheros

Publicado por Pico (37 intervenciones) el 02/03/2014 13:10:51
Yo no sé lo que sabes o dejas de saber, pero es como si eres médico, y en un foro de medicina te encuentras a uno que dice que tiene a su madre tirada en el salón con un infarto, que hay que operar de urgencia, que por dónde abre y qué hace.

En la página que te he puesto está cómo leer un archivo. Para compararlo te vale leer carácter a carácter, que es byte a byte, dado que si es txt es ascii, y cada carácter ascii es un byte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main()
{
      	FILE *archivo, *archivo2;
	char caracter, caracter2;
 
	archivo = fopen("prueba.txt","r");
    archivo2 = fopen("prueba2.txt","r");
 
	if (archivo == NULL || archivo2 == NULL)
    {
 		printf("\nError de apertura del archivo. \n\n");
               return 0;
    }
    else
    {
	    while (feof(archivo) == 0 || feof(archivo) == 0)
	    {
		caracter = fgetc(archivo);
		caracter2 = fgetc(archivo2);
		if (caracter!=caracter2)
        {
            printf ("No se puede iniciar EJEMPLO.EXE, pulsa una tecla para continuar");
            scanf(&caracter);
            return 0;
        }
    }
    fclose(archivo);
    fclose(archivo2);
    system("ejecutable que ejecutar");
    return 1;
}

Ya está, programa entero hecho. La próxima vez, en vez de en un foro, pregunta en "solicitud de programadores". Allí te dicen quién puede hacértelo y te manda un presupuesto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

comparar dos ficheros

Publicado por Chema (187 intervenciones) el 03/03/2014 18:17:51
---En la página que te he puesto está cómo leer un archivo. Para compararlo te vale leer carácter a carácter, que es byte a byte, dado que si es txt es ascii, y cada carácter ascii es un byte.----

---Cada carácter ascii es un byte. ---

¿Seguro?. yo creo que no.

---dado que si es txt es ascii---
La extensión de un fichero no asegura nada sobre el contenido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 03/03/2014 18:28:31
Gracias Pico y Chema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comparar dos ficheros

Publicado por Pico (37 intervenciones) el 03/03/2014 18:31:46
Mario dice que tiene dos ficheros TXT. Tener un fichero txt no quiere decir que tenga un fichero con la extensión txt, sino que tiene un archivo del tipo txt, que es un archivo de texto ascii. Ya sé que puedes bajarte la última película de James Bond y cambiarle la extensión AVI por la de TXT, pero entonces no tienes un fichero TXT, sino un AVI al que le has puesto la extensión txt. Y un fichero TXT en windows (habla de EXE, ya sé que en mac se habla de txt en unicode) cada carácter es un byte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comparar dos ficheros

Publicado por Pico (37 intervenciones) el 03/03/2014 18:39:44
Por cierto Mario que se me ha olvidado poner antes del return en caso de que no sean los caracteres iguales

if (caracter!=caracter2) {
printf ("No se puede iniciar EJEMPLO.EXE, pulsa una tecla para continuar");
scanf(&caracter);
return 0;
}

ahí

que cierre los archivos abieros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 03/03/2014 18:40:59
Estáis hechos unas fieras... Lo mio es la parte de sistemas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 03/03/2014 19:12:26
Y una cosa que me viene a la mente, si por casualidad los TXT están vacios, este código da por buena la comparación y ejecuta el EXE?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comparar dos ficheros

Publicado por Pico (37 intervenciones) el 03/03/2014 19:32:02
Si los dos TXT están vacíos no se cumple el while, con lo que no empezará a leer caracteres y a comparar. Otra cosa es si uno está vacío y otro no. Entonces una parte del while será true y otra false. Como las dos partes están con un or, devolverá true, y sí entrará en el while e intentará leer de un archivo vacío. Será más adecuado poner un &&.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mario

comparar dos ficheros

Publicado por Mario (7 intervenciones) el 03/03/2014 19:35:08
Okey gracias !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comparar dos ficheros

Publicado por Chema (187 intervenciones) el 03/03/2014 20:13:00
--Y un fichero TXT en windows (habla de EXE, ya sé que en mac se habla de txt en unicode) cada carácter es un byte.--

¿Seguro? Yo creo que no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

comparar dos ficheros

Publicado por Chema (187 intervenciones) el 03/03/2014 20:31:59
¿Esta linea es correcta?

while (feof(archivo) == 0 || feof(archivo) == 0)



if (archivo == NULL || archivo2 == NULL)
{
printf("\nError de apertura del archivo. \n\n");
return 0;
}
else..........

El bloque else sobra.

El resultado de copiar código malo es que no se aprende a programar en C
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comparar dos ficheros

Publicado por Pico (37 intervenciones) el 03/03/2014 21:29:17
¿No tienes otra cosa que hacer?

---Cada carácter ascii es un byte. ---
¿Seguro?. yo creo que no.

¿No es un byte cada carácter ascii?

Sí, muy bonito. Si está el return no hace falta el else. Si además de tú se da cuenta él ya sería la leche. También podrías haberte dado cuenta de que tendría que ir un && y no un ||. Y si además se da cuenta él ya sería la releche

¿Queres que te ponga el enlace del hilo en el que dices que, a causa de las prisas (igual menos de las que tenía yo, ya podrías hoy tener las mismas), has metido la pata? Claro, el resultado de copiar código malo es que no se aprende a programar en C. No aprende ni el que pega el código.

Sí, ya sé que si te empeñas puedes grabar un txt en formato unicode, que van a ser dos bytes por carácter. Jo, qué haríamos sin gente como tú criticando siempre todo

Si quieres hacerle a Mario el programa mejor se lo haces y .. Y si quieres una lista de errores y correcciones de ese programa de la paso. Dudo mucho que te necesite a ti para encontarlos.

Y si quieres hacerle el programa perfecto, se lo haces. Yo no voy a ponerme a remirármelo, prefiero dejárselo como quede para que se esfuerce un poco. Lo que sí va a ser verdad es que yo voy a tener cosas más interesantes que hacer que estar con comentarios a tus programas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar