



Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Manejo de ficheros c++, punteros, etc.
Tipo: Diapositivas
1 / 6
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
C ofrece un conjunto de funciones para realizar operaciones de entrada y salida (E/S) con las cuales puedes leer y escribir cualquier tipo de fichero. Antes de ver estas funciones, hay que entender algunos conceptos básicos.
En C, un fichero se puede referir a un fichero en disco, a un terminal, a una impresora, etc. Dicho de otro modo, un fichero representa un dispositivo concreto con el que puedes intercambiar información. Antes de poder trabajar con un fichero, tienes que abrir ese fichero. Tras terminar el intercambio de información, debes cerrar el fichero que abriste.
El conjunto datos que transfieres desde un programa a un fichero, o al revés, se le conoce como flujo ( stream en inglés), y consiste en una serie de bytes (o caracteres). A diferencia de un fichero, que se refiere a un dispositivo concreto de E/S, un flujo es independiente del dispositivo. Es decir, todos los flujos tienen el mismo comportamiento independientemente del dispositivo al que esté asociado. De esta manera puedes realizar operaciones E/S con tan sólo asociar un flujo a un fichero. Hay dos tipos de flujos. Uno es el flujo de texto , consistente en líneas de texto. Una línea es una secuencia de caracteres terminada en el carácter de línea nueva ('\n' ó '\r\n'). El otro formato es el del flujo binario , que consiste en una secuencia de bytes que representan datos internos como números, estructuras o arrays. Se utiliza principalmente para datos que no son de tipo texto, donde no importa la apariencia de esos datos en el fichero (da igual que no se vean "en bonito", como podría verse en un fichero de texto).
Una porción de memoria que se usa temporalmente para almacenar datos antes de ser enviados a su destino se llama buffer. Con ayuda de los buffers, el sistema operativo puede mejorar su eficiencia reduciendo el número de accesos a efectuar en un dispositivo de E/S (es decir, en un fichero). El acceso a disco o a otros dispositivos de E/S suele ser más lento que a memoria de acceso directo; por eso, si varias operaciones E/S se realizan en un buffer en vez de en el fichero en sí, el funcionamiento de un programa es más eficiente. Por ejemplo, si se envían varias operaciones de escritura a un buffer, las modificaciones de esos datos escritos se quedan en memoria hasta que es hora de guardarlas, que es cuando esos datos se llevan al dispositivo real (a este proceso se le conoce como flushing ). Por defecto, todas las operaciones de los flujos E/S en C son con buffer.
Ya que la unidad más pequeña que se puede representar en C es un caracter, se puede acceder a un fichero desde cualquiera de sus caracteres (o bytes, que es lo mismo). Se puede leer o escribir cualquier número de caracteres desde un punto móvil, conocido como el indicador de posición de fichero. Los caracteres se leen o escriben en secuencia desde ese punto, y el indicador se va moviendo de acuerdo a eso. El indicador se coloca al principio del fichero cuando éste se abre, pero luego se puede mover a cualquier punto explícitamente (no sólo porque se haya leído o escrito algo).
Vamos a centrarnos en cómo abrir y cerrar ficheros y en cómo interpretar los mensajes de error que pueden dar estas dos operaciones.
a ficheros para realizar las operaciones E/S. La siguiente línea de código declara una variable de tipo puntero a fichero: FILE ptFichero* ;
representa el indicador de posición de fichero.
A veces podrás ver que el modo está escrito como "rb+" en vez de "r+b", por ejemplo, pero es equivalente. En estos modos no se ha establecido el tipo de archivo, para ello se utilizará t para especificar si es un archivo de texto o b para binario: t tipo de texto sino se especifica “t” o “b” se asume por defecto que es “t” tipo texto b tipo binario PUTS Y GETS. DIFERENCIA CON PRINTF Y SCANF Las funciones printf y scanf proporcionan un marco general para mostrar y pedir datos de distintos tipos. En el caso de datos de tipo cadenas de caracteres (coloquialmente Strings) C dispone de instrucciones específicas que simplifican la codificación: puts() y gets(). La función puts recibe un único argumento: la cadena de caracteres a mostrar por pantalla. Escribe este código y comprueba la equivalencia con printf que proporciona puts para cadenas de caracteres: #include <stdio.h> #include <stdlib.h> // Ejemplo aprenderaprogramar.com int main() { char url [] = "http://www.aprenderaprogramar.com"; printf ("%s\n", url) ; puts (url); return 0; }
La función gets() recibe como único argumento la variable en la que debe almacenarse una entrada de usuario que va a ser considerada como una cadena de caracteres. Ejecuta este programa. #include <stdio.h> #include <stdlib.h> // Ejemplo aprenderaprogramar.com int main() { char frase [100]; printf ("Escriba una frase") ; gets (frase); puts ("Frase introducida:"); puts (frase); return 0; } gets se diferencia de scanf en que scanf sólo captura una cadena de texto hasta que aparece el primer espacio o fin de línea (desechando todo lo que venga a continuación). De este modo si tratamos de capturar con scanf el texto “Amanece un maravilloso día aquí en Alaska” lo único que capturaremos es “Amanece”, perdiéndose el resto del texto. En cambio con gets se captura todo el texto. Tanto con scanf como con gets se introduce automáticamente un fin de cadena (\0) al final del texto capturado (de ahí que un array de caracteres siempre tenga un carácter adicional además del texto visible, el correspondiente al final de cadena.) Modifica el programa anterior usando scanf ("%s",frase); en lugar de gets (frase) y comprueba las diferencias cuando introduces frases con espacios intermedios. Muchas veces no se usan puts y gets porque las funciones printf y scanf son más generales, pero para el tratamiento de cadenas de texto en general resultan ventajosas las instrucciones específicas por la comodidad que aportan. Luego de estudiar lo anterior realiza las siguientes actividades:
1. Pruebe y comprenda el siguiente código: Crea un programa que vaya leyendo las frases que el usuario teclea y las guarde en un fichero de texto llamado “registroDeUsuario.txt”. Terminará cuando la frase introducida sea "fin" (esa frase no deberá guardarse en el fichero). #include <stdio.h> #include <string.h> int main() { FILE ptFichero; char fin[]="fin"; char frase[60];*