• Jueves 28 de Marzo de 2024, 12:17

Autor Tema:  Copiar fichero  (Leído 2521 veces)

alex1510

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Copiar fichero
« en: Lunes 2 de Noviembre de 2009, 20:06 »
0
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

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Copiar fichero
« Respuesta #1 en: Lunes 2 de Noviembre de 2009, 21:46 »
0
hay 2 problemas que detecte a simple vista
1 .estas lineas nunca se ejecutan
Código: Text
  1.  
  2. fclose (fin);
  3. fclose (fout);
  4. return 0;
  5. Sleep(10000);
  6.  
  7.  
por que se va a "reinicio"
Código: Text
  1. goto reinicio;
  2.  

2. El archivo nunca se cierra por lo anterior mencionado

alex1510

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Copiar fichero
« Respuesta #2 en: Lunes 2 de Noviembre de 2009, 22:49 »
0
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

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Copiar fichero
« Respuesta #3 en: Martes 3 de Noviembre de 2009, 11:39 »
0
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++
  1.  
  2. while(!SALIR){
  3. abrirFicheros(in, out);
  4. copiarFilas(3);
  5. cerrarFicheros(in, out);
  6. sleep(10000);
  7. }
  8.  
  9.  

Donde la condicion salir puede ser la pulsacion de una tecla, o un numero de filas copiadas o lo que tu quieras.

alex1510

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Copiar fichero
« Respuesta #4 en: Martes 3 de Noviembre de 2009, 21:25 »
0
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

alex1510

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Copiar fichero
« Respuesta #5 en: Martes 3 de Noviembre de 2009, 23:08 »
0
Ya estoy realizando el programa, pero me encuentro con un problema. Si cierro el archivo de entrada, al volverlo a abrir, como puedo leer las 3 siguientes lineas siguientes a las anteriores, es decir, como se donde deje de leer antes de cerrar el archivo. Gracias

killrazor

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Copiar fichero
« Respuesta #6 en: Martes 3 de Noviembre de 2009, 23:36 »
0
Con un contador interno, que acumule las veces que has leido el archivo.

alex1510

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Copiar fichero
« Respuesta #7 en: Martes 3 de Noviembre de 2009, 23:41 »
0
no puedo situar ub puntero??

killrazor

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Copiar fichero
« Respuesta #8 en: Miércoles 4 de Noviembre de 2009, 09:12 »
0
Pues yo se que SEEK podemos poner el cursor (no puntero) en un sitio determinado del archivo, pero esto es para ficheros binarios. Ahora mismo no se si se puede hacer por lineas, pero creo que no.