Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mark182 en 27 Julio 2011, 19:18 pm



Título: Programa que consulta archivo de texto
Publicado por: mark182 en 27 Julio 2011, 19:18 pm
Hola como estan?

Tengo un conocimiento basico/medio de C y queria saber como podria hacer un programa que, al estar ejecutado, lea un archivo de texto unicamente cuando este cambie de tamaño. O sea, cuando se alla escrito en el archivo de texto.

Alguna idea de como encarar el problema?

Se como leer un archivo de texto y demas, pero no hacer que el programa lea el archivo unicamente cuando este cambia de tamaño. Lo intente hacer con un while que consulte a cada rato su tamaño, pero se me tilda el sistema.

Como lo podria hacer?

Gracias.


Título: Re: Programa que consulta archivo de texto
Publicado por: Queta en 27 Julio 2011, 19:50 pm
Puedes hacer algo como:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. while(1)
  6. {
  7.  
  8. FILE *file = fopen("C:\\test.txt", "r");
  9.  
  10. if(file == 0)
  11. return 1;
  12.  
  13. fseek(file, 0, SEEK_END);
  14.  
  15. int tamano = ftell(file);
  16.  
  17. rewind(file);
  18.  
  19. if(tamano != 0)
  20. printf("Todo normal.\n");
  21.  
  22. else
  23. printf("Error.\n");
  24. }
  25.  
  26. return 0;
  27. }


Título: Re: Programa que consulta archivo de texto
Publicado por: mark182 en 27 Julio 2011, 19:58 pm
esta bueno el programa que me pasaste Queta, el problema es que para que el programa revise el archivo tenes que estar dandole enter y seria lo mismo de ejecutar el programa cada vez que yo se que el archivo se modifico.

Mi idea es que cuando el archivo se guardo con el nuevo contenido, en ese momento el programa lee lo que hay en el archivo y lo cierre.


Título: Re: Programa que consulta archivo de texto
Publicado por: naderST en 27 Julio 2011, 21:31 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int tam_archivo(FILE * fstream){
  5.    int tam;
  6.    int pos_actual = ftell(fstream);
  7.  
  8.    fseek(fstream, 0, SEEK_END);
  9.    tam = ftell(fstream);
  10.    fseek(fstream, pos_actual, SEEK_SET);
  11.  
  12.    return tam;
  13. }
  14.  
  15. int main()
  16. {
  17.    FILE * hFile = fopen("C:\\prueba.txt", "r");
  18.  
  19.    int tam = tam_archivo(hFile);
  20.    int ntam = 0;
  21.  
  22.    while(1){
  23.        if(tam != ntam){
  24.            char * buffer = (char*)malloc(tam);
  25.            fseek(hFile, 0, SEEK_SET);
  26.            fread(buffer, 1, tam, hFile);
  27.            system("cls");
  28.            printf("%s", buffer);
  29.            free(buffer);
  30.            ntam = tam;
  31.        }
  32.  
  33.        tam = tam_archivo(hFile);
  34.    }
  35.  
  36.    fclose(hFile);
  37.    return 0;
  38. }
  39.  


Título: Re: Programa que consulta archivo de texto
Publicado por: mark182 en 27 Julio 2011, 21:41 pm
Muchas gracias naderST, funciona barbaro!! hay que hacerle unos retoques igualmente, porque si el archivo se vacia, se guarda, se vuelve a abrir y se escribe, y se vuelve a guardar. En el programa aparece lo escrito pero a continuacion con basura.

Calculo que solamente hay que vaciar el buffer del teclado y listo.

Muchas gracias.


Título: Re: Programa que consulta archivo de texto
Publicado por: naderST en 27 Julio 2011, 21:47 pm
De nada, agrega justo después del fread lo siguiente:

Código
  1. buffer[tam] = '\0';
  2.  

EDIT:
Al parecer no lo soluciona, no se porque muestra esos caracteres raros.

EDIT EDIT:

Solucioné leyendo el archivo de otra manera y funcionó bien aquí se los dejo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int tam_archivo(FILE * fstream){
  5.    int tam;
  6.    int pos_actual = ftell(fstream);
  7.  
  8.    fseek(fstream, 0, SEEK_END);
  9.    tam = ftell(fstream);
  10.    fseek(fstream, pos_actual, SEEK_SET);
  11.  
  12.    return tam;
  13. }
  14.  
  15. int main()
  16. {
  17.    FILE * hFile = fopen("C:\\prueba.txt", "r");
  18.  
  19.    int tam = tam_archivo(hFile);
  20.    int ntam = 0;
  21.  
  22.    while(1){
  23.        if(tam != ntam){
  24.            fseek(hFile, 0, SEEK_SET);
  25.            system("cls");
  26.            while(!feof(hFile)){
  27.                char c = fgetc(hFile);
  28.  
  29.                if(c != EOF)
  30.                    printf("%c", c);
  31.  
  32.            }
  33.            ntam = tam;
  34.        }
  35.  
  36.        tam = tam_archivo(hFile);
  37.    }
  38.  
  39.    fclose(hFile);
  40.    return 0;
  41. }
  42.  


Título: Re: Programa que consulta archivo de texto
Publicado por: mark182 en 27 Julio 2011, 22:21 pm
me ganaste de mano, tambien estaba probando con el fgetc jeje.

Funciona perfecto!!


Gracias.