Guía Práctica de Estudio 12: Lectura y Escritura de Datos: Elaborado Por
Guía Práctica de Estudio 12: Lectura y Escritura de Datos: Elaborado Por
Guía Práctica de Estudio 12: Lectura y Escritura de Datos: Elaborado Por
Elaborado por:
M.C. Edgar E. García Cano
Ing. Jorge A. Solano Gálvez
Revisado por:
Ing. Laura Sandoval Montaño
Guía práctica de estudio 12: Lectura y
escritura de datos
Objetivo:
Introducción
1
Licencia GPL de GNU
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se puede
modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Jorge A. Solano
*
*/
Apuntador a archivo
Un apuntador a un archivo es un hilo común que unifica el sistema de E/S con un buffer
donde se transportan los datos.
FILE *F;
2
Abrir archivo
La función fopen() abre una secuencia para que pueda ser utilizada y la asocia a un archivo.
Su estructura es la siguiente:
Cerrar archivo
La función fclose() cierra una secuencia que fue abierta mediante una llamada a fopen().
Escribe la información que se encuentre en el buffer al disco y realiza un cierre formal del
archivo a nivel del sistema operativo.
Un error en el cierre de una secuencia puede generar todo tipo de problemas, incluyendo la
pérdida de datos, destrucción de archivos y posibles errores intermitentes en el programa.
La firma de esta función es:
3
Código (abrir cerrar archivo)
#include<stdio.h>
/*
Este programa permite abrir un archivo en modo de lectura, de ser posible.
*/
int main() {
FILE *archivo;
archivo = fopen("archivo.txt", "r");
if (archivo != NULL) {
printf("El archivo se abrió correctamente.\n");
int res = fclose(archivo);
printf("fclose = %d\n", res);
} else {
printf("Error al abrir el archivo.\n");
printf("El archivo no existe o no se tienen permisos de lectura.\n");
}
return 30;
}
Las funciones fgets() y fputs() pueden leer y escribir, respectivamente, cadenas sobre los
archivos. Las firmas de estas funciones son, respectivamente:
La función fputs() permite escribir una cadena en un archivo especifico. La función fgets()
permite leer una cadena desde el archivo especificado. Esta función lee un renglón a la vez.
4
Código (fgets)
#include<stdio.h>
/*
Este programa permite lee el contenido de un archivo, de ser posible, a
través de la función fgets.
*/
int main() {
FILE *archivo;
char caracteres [50];
archivo = fopen("gets.txt", "r");
if (archivo != NULL) {
printf("El archivo se abrió correctamente.");
printf("\nContenido del archivo:\n");
while (feof(archivo) == 0) {
fgets (caracteres, 50, archivo);
printf("%s", caracteres);
}
fclose(archivo);
}
return 32;
}
Código (fputs)
#include<stdio.h>
/*
Este programa permite escribir una cadena dentro de un archivo, de ser
posible, a través de la función fputs.
*/
int main() {
FILE *archivo;
char escribir [] = "Escribir cadena en archivo mediante fputs.
\n\tFacultad de Ingeniería.\n";
archivo = fopen("puts.txt", "r+");
if (archivo != NULL) {
printf("El archivo se abrió correctamente.\n");
fputs (escribir, archivo);
fclose(archivo);
} else {
printf("Error al abrir el archivo.\n");
printf("El archivo no existe o no se tienen permisos de lectura.\n");
}
return 0;
}
5
Funciones fscanf y fprintf
Donde apArch es un apuntador al archivo devuelto por una llamada a la función fopen(),
es decir, fprintf() y fscanf() dirigen sus operaciones de E/S al archivo al que apunta apArch.
formato es una cadena que puede incluir texto o especificadores de impresión de variables.
En los puntos suspensivos se agregan las variables (si es que existen) que se quieran mandar
a imprimir al archivo.
Código (fscanf)
#include<stdio.h>
/*
Este programa permite leer el contenido de un archivo,
de ser posible, a través de la función fscanf.
*/
int main() {
FILE *archivo;
char caracteres [50];
archivo = fopen("fscanf.txt", "r");
if (archivo != NULL) {
while (feof(archivo)==0){
fscanf(archivo, "%s", caracteres);
printf("%s\n", caracteres);
}
fclose(archivo);
} else {
printf("El archivo no existe.\n");
}
return 32;
}
6
Código (fprintf)
#include<stdio.h>
/*
Este programa permite escribir dentro de un archivo,
de ser posible, a través de la función fprintf.
*/
int main() {
FILE *archivo;
char escribir [] = "Escribir cadena en archivo mediante fprinft.
\nFacultad de Ingeniería.\n";
archivo = fopen("fprintf.txt", "r+");
if (archivo != NULL) {
fprintf(archivo, escribir);
fprintf(archivo, "%s", "UNAM\n");
fclose(archivo);
} else {
printf("El archivo no existe o no se tiene permisos de lectura /
escritura.\n");
}
return 0;
}
fread y fwrite son funciones que permiten trabajar con registros de longitud conocida. fread
permite leer uno o varios registros de la misma longitud a partir de una dirección de
memoria determinada (apuntador).
fwrite permite escribir hacia un archivo uno o varios registros de la misma longitud
almacenados a partir de una dirección de memoria determinada.
7
Código (fread)
#include <stdio.h>
/*
Este programa muestra el contenido de un archivo. El
nombre del archivo se recibe como argumento de la
función principal.
*/
fclose(ap);
return 0;
}
8
Código (fwrite)
#include <stdio.h>
/*
Este programa realizar una copia exacta de dos archivos. Los
nombres de los archivos (origen y destino) se reciben como
argumentos de la función principal.
*/
// Copia archivos
while (bytesLeidos = fread(buffer, 1, 2048, archEntrada))
fwrite(buffer, 1, bytesLeidos, archivoSalida);
// Cerrar archivos
fclose(archEntrada);
fclose(archivoSalida);
return 0;
}
9
Bibliografía
10