 Un stream es una especie de canal a través
  del cual fluyen los datos.
 Técnicamente, un stream es el enlace
  lógico utilizado por el programador en C,
  C++ para leer o escribir datos desde y hacia
  los dispositivos estándar conectados a la PC.
 El dispositivo estándar para manipular
  entradas es el teclado y está asociado al
  objeto cin; el dispositivo estándar de
  salida está asociado al objeto cout.
   El almacenamiento de datos en variables y arrays
    (arreglos) es temporal; los datos se pierden cuando
    se termina el programa.
   La mayoría de las aplicaciones requiere que la
    información se almacene de forma persistente es
    decir que no se borre cuando se termine la
    ejecución del programa. Debido a esto se
    requiere utilizar archivos (ficheros) para almacenar
    de modo permanente grandes cantidades de
    datos, incluso después de que los programas que
    crean los datos se terminan.
1. Un fichero se identifica por su nombre, el cual
   generalmente está compuesto por:
• Path: Indica la ruta para encontrar el fichero
  incluyendo la unidad de almacenamiento donde
  se halla.
•   Nombre
•   Extensión: Son tres caracteres que sirven para
  identificar el
    tipo de fichero
Por ejemplo:

            "C:Mis documentosapuntes.doc"
     path
                                              extensión
                        nombre
2.   Un fichero puede estar compuesto por registros,
     cada uno de los cuales contiene información sobre
     un elemento. Un registro está compuesto por
     campos.
     Ejemplo: Se tiene un fichero de registros o
     estructuras Articulo

                     struct Articulo {
                       int codigo;
               char descripcion[maxdesc];
                       float precio;
                                     };
  Secuencial: para acceder al elemento i-ésimo se
   recorre desde el primer elemento hasta el
   elemento i-1.
Ejemplo: El almacenamiento en una cinta(casette)
es de acceso secuencial.

  Directo: para acceder al elemento i-ésimo se
   hace directamente.
Ejemplo: El almacenamiento en un disco es de
acceso directo.
   Secuencial: Las consultas de los registros se hace
    secuencialmente desde el primer elemento hasta el elemento
    i-ésimo.
 Directa: Se establece una relación entre la clave del registro y
    la posición del registro en el fichero.
Ejemplo: Se tiene un fichero de registros Articulo cuyo campo
clave es el código. Los códigos son números que van de 10 en
10, ej. 10, 20, 30, 40, 50, etc. Se realiza la siguiente función de
acceso F:
 F (código) = código(10);
La cual que devuelve la posición del registro a partir del
código, y por lo tanto puede accederse a él directamente.
 Indexada: Básicamente es una organización secuencial a la
    que se le agrega una o más tablas de índices que permiten
    acceder a los registros de manera más directa.
 Existen operaciones que afectan a todo el
  fichero, entre las cuales se enumeran:
 Crear un fichero
 Borrar un fichero
 Ordenar un fichero según algún criterio de
  orden
 Fusionar dos ficheros para formar un tercer
  fichero
 Dividir un fichero en dos o más ficheros
   Además, existen otras operaciones que
    afectan a uno o más registros del
    fichero, entre las cuales se enumeran:

 Alta de un nuevo registro
 Baja de un registro
 Modificación de uno o más registros
 Consulta de uno o más registros
   Su sintaxis es:
                      nombre_fstream.operacion

  Open(nombre_fichero, opciones): Puede usarse cuando en el
   constructor se ignoró la apertura del fichero.
Ejemplo:
fichero1.open("prueba.txt", ios::in); esto antes de realizar
cualquier lectura.

  close(): Cuando se desea cerrar un stream
Ejemplo:
fichero1.close(); esto después de haber realizado todas las
lecturas y/o escrituras.

    eof(): Es una función que devuelve un valor diferente a 0
     (TRUE) si se llegó al fin de fichero, de otro modo devuelve 0
     (FALSE)
Ejemplo:
if (fichero1.eof()){
 //fin de fichero, no hay más datos
}
    is_open(): Es una función que devuelve un valor diferente a 0
     (TRUE) si el fichero asociado al stream está abierto, de otro
     modo devuelve 0 (FALSE).
Ejemplo:
if (fichero1.is_open()){
cout<<el fichero está abierto;
}
 tellp(), es una función que devuelve como resultado la
     posición actual (tipo pos_type) de un stream de salida.

   seekp(posición, posición_inicial), sitúa el lugar de escritura
    indicada en posición en forma relativa a posicion_inicial, la
    cual puede ser ios::beg (comienzo), ios::cur (actual), ios::end
    (fin).
  Existe una manera de manipular ficheros en C++
   mediante los denominados streams.
 Un stream representa un flujo de información,
   desde el programa a un dispositivo o periférico de
   salida, o desde un periférico de entrada al
   programa
 La manera de utilizar un stream de entrada es:
stream_entrada >> variable;
 La manera de utilizar un stream de salida es:
stream_salida << información.
   Hasta el momento se han utilizado dos streams
    predefinidos:
   cin es un stream de entrada asociado al teclado
   cout es un stream de salida asociado a la pantalla

Pueden definirse stream de entrada y/o salida y
asociarlos a un fichero, de manera que se puedan
recibir datos del fichero y/o enviar datos al fichero
respectivamente.

  La librería que se debe utilizar es <fstream.h>.
 Se debe declarar un stream mediante el constructor:
 fstream nombre_stream (nombre_fichero, opciones);
   Las opciones indican diferentes modos entre los
    cuales se encuentran:
   ios::in: Crea un stream de entrada, es decir, para
    lectura de datos del fichero
   ios::out: Crea un stream de salida, es decir, para
    escritura de datos en el fichero
   ios::ate: Hace que la posición inicial sea al final del
    fichero
   ios::app: Se sitúa al final del fichero antes de cada
    escritura
   ios::trunc: Borra cualquier cosa que pudiera haber en
    el fichero
   ios::nocreate: Si el fichero no existe fallará
   ios::noreplace: Si el fichero existe fallará
   ios::bin: Abre el fichero como binario
Ejemplo:
 stream de salida asociado al fichero prueba.txt. Se borra
   cualquier contenido del mismo.
        fstream fichero1 ("prueba.txt", ios::out|ios::trunc)

   stream de entrada asociado al fichero prueba.txt
              fstream fichero2 ("prueba.txt", ios::in);
   Cuando se quiere guardar información de
    estructuras o registros en C/C++ se deben utilizar las
    funciones de ficheros de la librería <stdio.h>.

   Existe un tipo de datos denominado FILE por medio
    del cual se manipulan los ficheros.

   Entre las funciones definidas para trabajar con
    ficheros se encuentran:
   FILE* fopen (const char *name, const char *mode):
   recibe como parámetros:
 Un string name con el nombre del fichero
 Un string mode con el modo de apertura del fichero que
    puede ser:
    "r" : abre fichero existente para lectura. Si no existe falla la
          operación.
   "w" : abre fichero para escritura. Si existe, sus contenidos se
          borran.
   "a" : abre fichero para escritura. Si existe, se agregan los datos
          al final
  "r+" : abre fichero para lectura y escritura. El fichero debe existir.
 "w+" : abre fichero para lectura y escritura. Si existe, sus
          contenidos se borran
 "a+" : abre fichero para lectura y escritura. Si existe, se agregan
          datos al final
  int fclose (FILE *file)
La función fclose cierra el fichero abierto file.
 size_t fread (void *pbuffer, size_t size, size_t number, FILE *file)
Se usa para leer desde el fichero, y recibe como parámetros:
 Un puntero a FILE del fichero file desde el cual se quiere leer.
 Un número number de tipo size_t que indica la cantidad de
   elementos que se quiere leer.
 Un número size de tipo size_t que indica el tamaño en bytes de
   cada elemento.
 Un puntero pbuffer a un lugar donde se copiarán los
   elementos leídos.
 size_t fwrite (void *pbuffer, size_t size, size_t number, FILE *file)
La función fwrite se usa para escribir en el fichero, y recibe los
mismos parámetros que la función fread.
 int ftell (FILE *file)
La función ftell devuelve un int que indica el número
de bytes desde el comienzo hasta la posición donde
se encuentra el cabezal de lectura.

  int feof (FILE *file)
Devuelve 0 mientras las lecturas hechas no lleguen al
final del fichero.

 void rewind (FILE *file)
La función rewind sitúa el cabezal de lectura al inicio
del fichero.
   Luís, Joyanes aguilar. (2003): “Fundamentos de Programación:
    Algoritmos, Estructuras de Datos y Objetos.” Madrid.Mc-Graw
    Hill. Cuarta edición. Páginas 201 hasta 346 (Capitulo #9) .

   Anónimo, Fundamentos de informática [en
    línea], Ficheros, Fecha de consulta: 28-12-2012, Disponible en:
    http://dmi.uib.es/~abasolo/foninf/2002-2003/capitulos/6-
    ficheros.html

Fichero c y c++

  • 2.
     Un streames una especie de canal a través del cual fluyen los datos.  Técnicamente, un stream es el enlace lógico utilizado por el programador en C, C++ para leer o escribir datos desde y hacia los dispositivos estándar conectados a la PC.  El dispositivo estándar para manipular entradas es el teclado y está asociado al objeto cin; el dispositivo estándar de salida está asociado al objeto cout.
  • 3.
    El almacenamiento de datos en variables y arrays (arreglos) es temporal; los datos se pierden cuando se termina el programa.  La mayoría de las aplicaciones requiere que la información se almacene de forma persistente es decir que no se borre cuando se termine la ejecución del programa. Debido a esto se requiere utilizar archivos (ficheros) para almacenar de modo permanente grandes cantidades de datos, incluso después de que los programas que crean los datos se terminan.
  • 4.
    1. Un ficherose identifica por su nombre, el cual generalmente está compuesto por: • Path: Indica la ruta para encontrar el fichero incluyendo la unidad de almacenamiento donde se halla. • Nombre • Extensión: Son tres caracteres que sirven para identificar el tipo de fichero Por ejemplo: "C:Mis documentosapuntes.doc" path extensión nombre
  • 5.
    2. Un fichero puede estar compuesto por registros, cada uno de los cuales contiene información sobre un elemento. Un registro está compuesto por campos. Ejemplo: Se tiene un fichero de registros o estructuras Articulo struct Articulo { int codigo; char descripcion[maxdesc]; float precio; };
  • 6.
     Secuencial:para acceder al elemento i-ésimo se recorre desde el primer elemento hasta el elemento i-1. Ejemplo: El almacenamiento en una cinta(casette) es de acceso secuencial.  Directo: para acceder al elemento i-ésimo se hace directamente. Ejemplo: El almacenamiento en un disco es de acceso directo.
  • 7.
    Secuencial: Las consultas de los registros se hace secuencialmente desde el primer elemento hasta el elemento i-ésimo.  Directa: Se establece una relación entre la clave del registro y la posición del registro en el fichero. Ejemplo: Se tiene un fichero de registros Articulo cuyo campo clave es el código. Los códigos son números que van de 10 en 10, ej. 10, 20, 30, 40, 50, etc. Se realiza la siguiente función de acceso F: F (código) = código(10); La cual que devuelve la posición del registro a partir del código, y por lo tanto puede accederse a él directamente.  Indexada: Básicamente es una organización secuencial a la que se le agrega una o más tablas de índices que permiten acceder a los registros de manera más directa.
  • 8.
     Existen operacionesque afectan a todo el fichero, entre las cuales se enumeran:  Crear un fichero  Borrar un fichero  Ordenar un fichero según algún criterio de orden  Fusionar dos ficheros para formar un tercer fichero  Dividir un fichero en dos o más ficheros
  • 9.
    Además, existen otras operaciones que afectan a uno o más registros del fichero, entre las cuales se enumeran:  Alta de un nuevo registro  Baja de un registro  Modificación de uno o más registros  Consulta de uno o más registros
  • 10.
    Su sintaxis es: nombre_fstream.operacion  Open(nombre_fichero, opciones): Puede usarse cuando en el constructor se ignoró la apertura del fichero. Ejemplo: fichero1.open("prueba.txt", ios::in); esto antes de realizar cualquier lectura.  close(): Cuando se desea cerrar un stream Ejemplo: fichero1.close(); esto después de haber realizado todas las lecturas y/o escrituras.  eof(): Es una función que devuelve un valor diferente a 0 (TRUE) si se llegó al fin de fichero, de otro modo devuelve 0 (FALSE) Ejemplo: if (fichero1.eof()){ //fin de fichero, no hay más datos }
  • 11.
    is_open(): Es una función que devuelve un valor diferente a 0 (TRUE) si el fichero asociado al stream está abierto, de otro modo devuelve 0 (FALSE). Ejemplo: if (fichero1.is_open()){ cout<<el fichero está abierto; }  tellp(), es una función que devuelve como resultado la posición actual (tipo pos_type) de un stream de salida.  seekp(posición, posición_inicial), sitúa el lugar de escritura indicada en posición en forma relativa a posicion_inicial, la cual puede ser ios::beg (comienzo), ios::cur (actual), ios::end (fin).
  • 12.
     Existeuna manera de manipular ficheros en C++ mediante los denominados streams.  Un stream representa un flujo de información, desde el programa a un dispositivo o periférico de salida, o desde un periférico de entrada al programa  La manera de utilizar un stream de entrada es: stream_entrada >> variable;  La manera de utilizar un stream de salida es: stream_salida << información.
  • 13.
    Hasta el momento se han utilizado dos streams predefinidos:  cin es un stream de entrada asociado al teclado  cout es un stream de salida asociado a la pantalla Pueden definirse stream de entrada y/o salida y asociarlos a un fichero, de manera que se puedan recibir datos del fichero y/o enviar datos al fichero respectivamente.  La librería que se debe utilizar es <fstream.h>.  Se debe declarar un stream mediante el constructor: fstream nombre_stream (nombre_fichero, opciones);
  • 14.
    Las opciones indican diferentes modos entre los cuales se encuentran:  ios::in: Crea un stream de entrada, es decir, para lectura de datos del fichero  ios::out: Crea un stream de salida, es decir, para escritura de datos en el fichero  ios::ate: Hace que la posición inicial sea al final del fichero  ios::app: Se sitúa al final del fichero antes de cada escritura  ios::trunc: Borra cualquier cosa que pudiera haber en el fichero  ios::nocreate: Si el fichero no existe fallará  ios::noreplace: Si el fichero existe fallará  ios::bin: Abre el fichero como binario
  • 15.
    Ejemplo:  stream desalida asociado al fichero prueba.txt. Se borra cualquier contenido del mismo. fstream fichero1 ("prueba.txt", ios::out|ios::trunc)  stream de entrada asociado al fichero prueba.txt fstream fichero2 ("prueba.txt", ios::in);
  • 16.
    Cuando se quiere guardar información de estructuras o registros en C/C++ se deben utilizar las funciones de ficheros de la librería <stdio.h>.  Existe un tipo de datos denominado FILE por medio del cual se manipulan los ficheros.  Entre las funciones definidas para trabajar con ficheros se encuentran:
  • 17.
    FILE* fopen (const char *name, const char *mode): recibe como parámetros:  Un string name con el nombre del fichero  Un string mode con el modo de apertura del fichero que puede ser: "r" : abre fichero existente para lectura. Si no existe falla la operación. "w" : abre fichero para escritura. Si existe, sus contenidos se borran. "a" : abre fichero para escritura. Si existe, se agregan los datos al final "r+" : abre fichero para lectura y escritura. El fichero debe existir. "w+" : abre fichero para lectura y escritura. Si existe, sus contenidos se borran "a+" : abre fichero para lectura y escritura. Si existe, se agregan datos al final
  • 18.
     intfclose (FILE *file) La función fclose cierra el fichero abierto file.  size_t fread (void *pbuffer, size_t size, size_t number, FILE *file) Se usa para leer desde el fichero, y recibe como parámetros:  Un puntero a FILE del fichero file desde el cual se quiere leer.  Un número number de tipo size_t que indica la cantidad de elementos que se quiere leer.  Un número size de tipo size_t que indica el tamaño en bytes de cada elemento.  Un puntero pbuffer a un lugar donde se copiarán los elementos leídos.  size_t fwrite (void *pbuffer, size_t size, size_t number, FILE *file) La función fwrite se usa para escribir en el fichero, y recibe los mismos parámetros que la función fread.
  • 19.
     int ftell(FILE *file) La función ftell devuelve un int que indica el número de bytes desde el comienzo hasta la posición donde se encuentra el cabezal de lectura.  int feof (FILE *file) Devuelve 0 mientras las lecturas hechas no lleguen al final del fichero.  void rewind (FILE *file) La función rewind sitúa el cabezal de lectura al inicio del fichero.
  • 20.
    Luís, Joyanes aguilar. (2003): “Fundamentos de Programación: Algoritmos, Estructuras de Datos y Objetos.” Madrid.Mc-Graw Hill. Cuarta edición. Páginas 201 hasta 346 (Capitulo #9) .  Anónimo, Fundamentos de informática [en línea], Ficheros, Fecha de consulta: 28-12-2012, Disponible en: http://dmi.uib.es/~abasolo/foninf/2002-2003/capitulos/6- ficheros.html