Programa que consulta archivo de texto

Iniciado por mark182, 27 Julio 2011, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

mark182

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.

Queta

#1
Puedes hacer algo como:

#include <stdio.h>

int main()
{
while(1)
{
getchar();

FILE *file = fopen("C:\\test.txt", "r");

if(file == 0)
return 1;

fseek(file, 0, SEEK_END);

int tamano = ftell(file);

rewind(file);

if(tamano != 0)
printf("Todo normal.\n");

else
printf("Error.\n");
}

return 0;
}
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

mark182

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.

naderST


#include <stdio.h>
#include <stdlib.h>

int tam_archivo(FILE * fstream){
    int tam;
    int pos_actual = ftell(fstream);

    fseek(fstream, 0, SEEK_END);
    tam = ftell(fstream);
    fseek(fstream, pos_actual, SEEK_SET);

    return tam;
}

int main()
{
    FILE * hFile = fopen("C:\\prueba.txt", "r");

    int tam = tam_archivo(hFile);
    int ntam = 0;

    while(1){
        if(tam != ntam){
            char * buffer = (char*)malloc(tam);
            fseek(hFile, 0, SEEK_SET);
            fread(buffer, 1, tam, hFile);
            system("cls");
            printf("%s", buffer);
            free(buffer);
            ntam = tam;
        }

        tam = tam_archivo(hFile);
    }

    fclose(hFile);
    return 0;
}

mark182

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.

naderST

#5
De nada, agrega justo después del fread lo siguiente:


buffer[tam] = '\0';


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:


#include <stdio.h>
#include <stdlib.h>

int tam_archivo(FILE * fstream){
    int tam;
    int pos_actual = ftell(fstream);

    fseek(fstream, 0, SEEK_END);
    tam = ftell(fstream);
    fseek(fstream, pos_actual, SEEK_SET);

    return tam;
}

int main()
{
    FILE * hFile = fopen("C:\\prueba.txt", "r");

    int tam = tam_archivo(hFile);
    int ntam = 0;

    while(1){
        if(tam != ntam){
            fseek(hFile, 0, SEEK_SET);
            system("cls");
            while(!feof(hFile)){
                char c = fgetc(hFile);

                if(c != EOF)
                    printf("%c", c);

            }
            ntam = tam;
        }

        tam = tam_archivo(hFile);
    }

    fclose(hFile);
    return 0;
}

mark182

me ganaste de mano, tambien estaba probando con el fgetc jeje.

Funciona perfecto!!


Gracias.