Tutorial de Lenguaje C                                                                                               Dr. Roberto Gómez


FUNCIONES RELACIONADAS CON ARCHIVOS TIPO TEXTO



Existe un nÚmero muy grande de funciones para el manejo de archivos, entre las mÁs importantes estan:

    Operaciones sobre los streams estándar:

            printf()                                 escribe una línea de texto en stdout;
            putchar()                           escribe un caracter en stdout;
            puts()                                   escribe un arreglo caracteres en stdout;
            scanf()                                 lee una línea de texto de stdin;
           getchar()                            lee un caracter de stdin;
           gets()                                   lee un arreglo caracteres de stdin.

Operaciones sobre streams definidos por usuario:

            fscanf()                                  escribe línea texto en stream;
            fputc()                                   escribe un caracter en strem;
            fputs()                                    escribe un arreglo caracteres en stream;
            fscanf()                                  lee una línea de texto de stream;
            fgetc()                                   lee un caracter de stream;
            fgets()                                    lee un arreglo caracteres de stream;
            fread()                                   lee n bytes, en binario, del stream;
            fwrite()                                  escribe n bytes, en binario, al stream;
            fseek()                                   posiciona un apuntador en una posición del archivo;
            ftell()                                      obtienen la posición del apuntador en un archivo;
            feof()                                     prueba si se esta apuntando al indicador de fin archivo;
            fclose()                                 cierra el archivo apuntado por el stream;
            ferror()                                  prueba el indicador de error, 0 si no hubo error.
 

Ejemplo uso fgets(), fputs(), gets() y puts

Las sintaxis son:

1. char *fgets(char *s, int n, FILE *stream)

2. int fputs(char *s, FILE *stream)

3. char *gets(char *s)

4. int puts(char *s)

Nota: Una línea esta compuesta de caracteres hasta que aparece el caracter de cambio de línea LF: '\n'. Como dato curioso fgets() transmite caracter '\n' mientras que gets lo elimina. Por otra parte, puts lo regenera mientras que fputs no hace nada.

Ejemplo de uso:

char ligne[128];
FILE *in, *out;

while(gets(ligne) !=NULL)
            puts(ligne);

in = fopen(''fuente'', ''rb'');
out = fopen(''destino'', ''wb'');
while(fgets(ligne, 128, in) !=NULL)
fputs(ligne, out);
 

Uso del fscanf(), fprintf() y fclose()

Sintaxis:

1. int fprintf(FILE * stream)

2. int fscanf(char *format ...)

3. int fclose(FILE *stream)

4. int ferror(FILE *stream)

Ejemplo de uso:

while ((n=fscanf(flux,''%g'',%note[i]) ==1) {
            ...
}

if (n != EOF) {

            int code;

/* Se produjo un error en la lectura */

            code=ferror(flux);
            fprintf(stderr, ''Error %d lectura archivo: /users/notes'', code);
            fclose(flux);
            exit(1);
 }
 

Uso del feof()

1. int feof(FILE *stream)

Ejemplo de uso:

while (fscanf(flux,''%g'',&note[i]) ==1) {
            ...
}

if ( !feof(flux) ) /* error en la lectura */

{
    int code;
    code=ferror(flux);
    fprintf(stderr, ''Error %d lectura archivo:/users/notes'', code);
    fclose(flux);
    exit(1);
}
 

Uso del fread() y fwrite()

1. size_t fread(void *ptr, size_t size, sizer_t nmemb, FILE
*stream)

2. size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE
*stream)

Ejemplo de uso:

int i,tab[1000];
struct datos{
            int edad;
            char nombre[10];
            char apellido[15];
};

FILE *flux;
struct datos empleado; ...
            flux=fopen(''...'',''r'');
i=fwrite(%empleado, sizeof(struct datos), 1, flux);
/*un elemento tamaño sizeof(struct datos) es escrito en el stream flux*/
i=fwrite(tab, sizeof(int), 1000, flux);
/*1000 elementos tamaño sizeof(int) son escritos en el stream flux*/
}

se lee un elemento de tamaño sizeof(struct datos) del stream flux y la información

while ( !feof(flux) ) {
            fread(&empleado, sizeof(datos), 1, flux);
            ...
}
 

Uso de ftell() y fseek()

1. int fseek(FILE *stream, long int offser,, int whence)

            SEEK CUR: valor actual indicador posici'on archivo;
            SEEK SET: principio del archivo;
            SEEK END: fin de archvio;

2. int ftell(FILE *stream)

            Ejemplo uso:

impresi

char nombre[20], direc[60];
int pos;
FILE *base = fopen(''datitos'',''w+'');
for( i=0; ;i+=80)
        {
            fseek(base, i, SEEK SET);
            pos = ftell(base);
            fread(nombre, 20, 1, base);
            fread(direc, 60, 1, base);
            printf(''Nombre:%s, direc:%s, pos. archivo:%d \n'',nombre,direc,pos);
            if(feof(base) )
                    break;
        }
 

MENÚ PRINCIPAL