Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Manejo de ficheros C++, Diapositivas de Programación C

Manejo de ficheros c++, punteros, etc.

Tipo: Diapositivas

2022/2023

Subido el 29/07/2023

jonathan-alberto-patino-delgado
jonathan-alberto-patino-delgado 🇨🇴

3 documentos

1 / 6

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
TEMA: FICHEROS:
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.
1.1. Qué es un fichero
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.
1.2. Qué es un flujo o stream
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).
1.3. E/S mediante buffers
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Manejo de ficheros C++ y más Diapositivas en PDF de Programación C solo en Docsity!

TEMA: FICHEROS:

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.

1.1. Qué es un fichero

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.

1.2. Qué es un flujo o stream

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).

1.3. E/S mediante buffers

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.

1.4. Comportamiento del modelo E/S

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).

2. Funciones básicas

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.

2.1. Punteros a FILE

La estructura FILE es la estructura que controla los ficheros y se

encuentra en la cabecera stdio.h. Los flujos utilizan estos punteros

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* ;

En la estructura FILE es donde se encuentra el atributo que

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 binarioPUTS 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];*