Programación General > C/C++

 Copiar fichero

(1/2) > >>

alex1510:
Hola buenas.
Expongo el siguiente codigo que no consigo que haga lo que quiero y no se donde esta el problema. La intencion que tengo es coger un archivo y ir copiando tres lineas cada cierto tiempo a otro, es decir, que al final tendre el mismo archivo pero que se ha ido rellenando con el tiempo. He puesto un retardo de 10 segundos para que se rellenen las 3 lineas.

main ( )
{
FILE *fin;
FILE *fout;
char linea[300];
char x;
int i;
reinicio:
if (((fin = fopen("PartHistory.plf", "r")) == NULL) || ((fout = fopen("Prueba.txt" , "a")) == NULL))
   {
          if (fout != NULL) fclose (fout) ;
             {
                   if (fin != NULL) fclose (fin) ;
                   printf ("Error en la apertura de ficheros de salidan" );
             }
     return 1;
   }


i=0;
do {
     fgets(linea,300,fin);
     fputs (linea, fout);
     i=i+1;
}
while (i<3);

goto reinicio;
fclose (fin);
fclose (fout);
return 0;
Sleep(10000);
}

Por favor, si alguien detecta mi error. Lo que me ocurre es que se ejecuta la primera vez, y luego se cierra el programa. Utilizo dev-c++. Muchas gracias

lostshell:
hay 2 problemas que detecte a simple vista
1 .estas lineas nunca se ejecutan

--- Código: Text --- fclose (fin);fclose (fout);return 0;Sleep(10000);  por que se va a "reinicio"
--- Código: Text ---goto reinicio; 
2. El archivo nunca se cierra por lo anterior mencionado

alex1510:
si, eso yo también lo se, pero el programa, extrañamente se cierra después de la primera ejecución. me puede decir como lo puedo hacer??porque ha entendido lo que pretendo verdad??gracias por atenderme

killrazor:
Yo lo que haria, ademas de copiar  en la pizarra 1000 veces que no usaras nunca mas el goto en un programa :), seria separar las dos funcionalidades. Por un lado, olvidate del retardo de 10 segundos y haz una funcion que copie las tres ultimas lineas, y despues usa un pequeño menu de toda la vida que en caso de que le des al numero uno, te copie las 3 ultimas filas.

Una vez te funcione, juega con el tiempo. Lo que yo veo es que con el goto, vuelves a reinicio, sin pasar por el sleep. Al copiar las tres lineas no cierras el archivo, entonces el programa llega al goto, sube hasta reinicio y vuelve a abrir los archivos sin haberlos cerrado previamente, entonces seguramente da un error, los archivos se cierran (por eso tu percepcion es que se ejecuta la primera vez), y acto seguido el programa devuelve un 1.

Creo que el goto hace que tu programa pierda todo tipo de orden, asi que si puedes intenta pensarlo de otra manera, como por ejemplo:

--- Código: C++ --- while(!SALIR){abrirFicheros(in, out);copiarFilas(3);cerrarFicheros(in, out);sleep(10000);}  
Donde la condicion salir puede ser la pulsacion de una tecla, o un numero de filas copiadas o lo que tu quieras.

alex1510:
Gracias por la respuesta. Ya habia oido que el goto no le utilizara. Muchas gracias por la respuesta. Yo el problema que veo es al llegar al final del archivo, que no se lo que haría. Gracias

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa