Ficheros en C

1 marzo 2007
jralbendin
Pizarra

Volvemos a la carga con los problemas relacionados con la programación en C. En este caso debeis adivinar el contenido del fichero una vez ejecutado cada programa. Para que la respuesta sea completa, hay incluir una explicación convincente.

El fichero original frw.txt contiene el siguiente texto:

abcdefghijklmn 

Caso 1:

#include <stdio.h>

int main()

{ FILE *pf; char c;

pf=fopen("frw.txt","r+b");

fread(&c,sizeof(char),1,pf);

fread(&c,sizeof(char),1,pf);

c='x';

fwrite(&c,sizeof(char),1,pf);

fclose(pf);

return 0;

}

Caso 2:

#include <stdio.h>

int main()

{ FILE *pf; char c;

pf=fopen("frw.txt","r+b");

fread(&c,sizeof(char),1,pf);

fread(&c,sizeof(char),1,pf);

fseek(pf,-1,SEEK_CUR);c='x';

fwrite(&c,sizeof(char),1,pf);

fclose(pf);

return 0;

}

  • En el primer ejercicio lee el primer caracter, luego lee el segundo y luego asigna ‘x’ a c, y luego escribe en el fichero el caracter c. En este caso el ejercicio sin el fseek no hace nada, en cambio en el ejercicio 2 sí asigna ‘x’ a la variable c por el fseek. El problema esta en que cuando se lee el fichero y se escribe hay que tener en cuenta la posicion del puntero.

  • En el primer ejercicio lee el primer caracter, luego lee el segundo y luego asigna ‘x’ a c, y luego escribe en el fichero el caracter c. En este caso el ejercicio sin el fseek no hace nada, en cambio en el ejercicio 2 sí asigna ‘x’ a la variable c por el fseek. El problema esta en que cuando se lee el fichero y se escribe hay que tener en cuenta la posicion del puntero.

  • El primer programa, abre un fichero llamado frw.txt, con los «fread» lo que hace es leer el interior del fichero como hay dos «fread» se posiciona en el principio del tercer carácter y lo cambia por una ‘x’ como indica: c=’x’.

    -Por lo tanto el resultado: abxdefghijklmn.

    En el segundo caso hace exactamente lo mismo que el primero pero con el «fseek» se posiciona en el lugar donde lo deja en la posición numero tres (al igual que el anterior ya que usa SEEK_CUR que lo deja en esa misma posición), y el -1 del «fseek» lo que hace es modificar el carácter anterior, por lo tanto modifica el segundo carácter.

    -Por lo tanto el resultado es: axcdefghijklmn.

  • Caso 1:
    Se abre el fichero binario en modo lectura y escritura. No llega a escribir en el fichero porque hay que meterle un fseek.

    Caso 2:
    Se abre el fichero binario en modo lectura y escritura. Con los dos fread nos posicionamos en la letra c y con el fseek -1 nos posicionamos en la letra b y la modificamos por una x.

  • caso1:
    no crea nada en el documento ya que le hace falta un fseek.

    caso2:
    en este caso si nos crea una x en la segunda posicion del documento.

Los comentarios están cerrados.