Repaso de archivos #include <stdio.h> int main(void) { FILE *fp; fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo uso, no lo cierro\n”); } else { /*** todo el código viene aquí ***/ fclose(fp); } } Repaso de archivos #include <stdio.h> int main(void) { FILE *fp; único include que hace falta fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo uso, no lo cierro\n”); } else { /*** todo el código viene aquí ***/ fclose(fp); } } Repaso de archivos #include <stdio.h> int main(void) { FILE *fp; única variable especial fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo uso, no lo cierro\n”); } else { /*** todo el código viene aquí ***/ fclose(fp); } } Repaso de archivos #include <stdio.h> int main(void) { FILE *fp; fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo uso, no lo cierro\n”); } else { /*** todo el código viene aquí ***/ fclose(fp); } } Tipo de acceso r lectura, debe existir w escritura, lo crea nuevo r+ igual que lectura, pero además permite escribir w+ igual que escritura, pero además permite leer Repaso de archivos #include <stdio.h> int main(void) { FILE *fp; fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo uso, no lo cierro\n”); } else { /*** todo el código viene aquí ***/ fclose(fp); } } La misma estructura que asignación dinámica de memoria. fopen ≈ calloc fclose ≈ free Repaso de archivos #include <stdio.h> int main(void) { FILE *fp; único include que hace falta única variable especial fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo uso, no lo cierro\n”); } else { /*** todo el código viene aquí ***/ fclose(fp); } } La misma estructura que asignación dinámica de memoria. fopen ≈ calloc fclose ≈ free Tipo de acceso r lectura, debe existir w escritura, lo crea nuevo r+ igual que lectura, pero además permite escribir w+ igual que escritura, pero además permite leer Archivos de Texto int a; float x; char txt[N_txt]; char *pc; /* control de lectura para fgets */ int ctrl; /* control de lectura para fscanf */ Funciones de escritura fprintf(fp,”%7d %13.4f %-10s\n”,a,x,txt); fputs(txt,fp); Funciones de lectura ctrl=fscanf(fp,”%d%f%s”,&a,&x,txt); pc=fgets(txt,N_txt,fp); Error si ctrl != 3 Error si pc == NULL Archivos binarios t_persona p; /* una persona */ Función de escritura fwrite(&p,sizeof(p),1,fp); Función de lectura ctrl=fread(&p,sizeof(p),1,fp); Error si ctrl != 1 Función de desplazamiento (para acceso directo) fseek(fp,j*sizeof(p),SEEK_SET); Se desplaza a la posición j del archivo. Equivale a vec[j] en vectores. Funciones auxiliares Acceso caracter a caracter int ch; fputc(ch,fp); fprintf(fp,”%c”,ch); ch=fgetc(fp); No puede dar error, sólo si llega al final del archivo. Ha llegado al final si ch == EOF Volver al principio del archivo (texto o binario) rewind(fp); fseek(fp,0,SEEK_SET); Final de archivo (control peligroso) ctrl=feof(fp); ctrl != 0 si se ha sobrepasado el final del archivo