190 likes | 315 Views
Asignatura: Lenguaje de Programación de Sistemas PPT No.05. Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay Araya Sitio de la asignatura: http://www.jiiea.com/SyPrgLan/ User : sist2014 psw : sist#C10. Administración de archivos: FAT NTFS
E N D
Asignatura: Lenguaje de Programación de Sistemas PPT No.05 Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay Araya Sitio de la asignatura: http://www.jiiea.com/SyPrgLan/ User: sist2014 psw: sist#C10
Administración de archivos: • FAT • NTFS C++ provee de las funciones necesarias para escribir y leer archivos
Dispositivos de almacenamiento de datos, en memoria secundaria(discos magnéticos, memorias flash) • La administración de archivos se maneja bajo modalidad FAT o NTFS • C provee las funciones necesarias para escribir o leer archivos en memoria secundaria
E/S de disco (memoria 2aria.) • Condiciones de archivos de disco • El archivo de disco no existe y se quiere crearlo y añadir información • El archivo de disco existe y se quiere extraer información de él • El archivo de disco existe y se quiere añadir más información, conservando la información que ya estaba en él. • El archivo de disco existe y se quiere borrar la información, y agregar información nueva.
Distintos métodos de …(cont.) • Para todos los casos se usan las siguientes funciones: • FILE *puntero • fopen(nombre_archivo, modo de operación) • fclose(puntero a archivo)
Distintos métodos de …(cont.) Acceso Random Se utiliza la función fseek(p,d,m ) la cual tiene 3 argumentos: p: puntero a archivo, d: desplazamiento, m: modo Modo puede tomar 3 valores • SEEK_SET(0) desplazamiento desde el inicio • SEEK_SET(1)desplazamiento desde posición actual • SEEK_SET(2)desplazamiento desde el final del archivo
Archivos de texto frente a binarios Incide en el rendimiento de la transferencia de los datos. Por ejemplo, se tiene el siguiente número entero: 12345678 Si almacenamos el número como texto 31 32 33 34 35 36 37 38 8 bytes Si almacenamos binario BC614E 3 bytes Por lo cual el ahorro de espacio es considerable
Operaciones sobre archivos “a” Abierto para añadir datos. Los datos se añaden al final del archivo o se crea un archivo nuevo si no existe. “r” Abierto para lectura. El archivo debe existir “w” Abierto para escritura. Los datos son escritos desde el principio, o se crea un nuevo archivo si no existe.
Operaciones sobre archivos(Cont) “a+” Abierto para lectura y añadir datos. Si el archivo no existe, se crea. “r+” Abierto para lectura y escritura. El archivo debe existir. “w+” Abierto para lectura y escritura. Se escribe desde el principio del archivo
Operaciones sobre archivos(Cont) “a+” Abierto para lectura y añadir datos. Si el archivo no existe, se crea. “r+” Abierto para lectura y escritura. El archivo debe existir. “w+” Abierto para lectura y escritura. Se escribe desde el principio del archivo
Ejemplo: escritura de un archivo binario #include "stdafx.h" #include <conio.h> #include <stdio.h> typedefstruct { charnombre_pieza[15]; /* Tipo de pieza. */ int cantidad; /* Número de piezas. */ floatprecio_unitario; /* Precio de cada pieza. */ } tipo_pieza; int _tmain(intargc, _TCHAR* argv[]) { tipo_pieza pieza; /* Variable de tipo tipo_pieza. */ FILE *puntero_a_archivo; /* Puntero a archivo. */ /* Abrir un archivo para escritura. */ puntero_a_archivo = fopen("Piezas00.DAT","wb"); /* Leer datos del usuario. */
do { fflush(stdin); printf("\nNombre de la pieza => "); gets(pieza.nombre_pieza); fflush(stdin); printf("Numero de piezas => "); scanf("%d", &pieza.cantidad); fflush(stdin); printf("Precio de cada pieza => "); scanf("%f", &pieza.precio_unitario); fflush(stdin); /* Escribir la estructura al archivo. */ fwrite(&pieza, sizeof(pieza), 1, puntero_a_archivo); printf("Quiere introducir mas piezas (s/n)? => "); } while (getche() == 's'); /* Cerrar el archivo abierto. */ fclose(puntero_a_archivo); return 0;
Ejemplo: lectura de un archivo binario #include "stdafx.h" #include <stdio.h> #include <conio.h> typedefstruct { charnombre_pieza[15]; /* Tipo de pieza. */ int cantidad; /* Número de piezas. */ floatprecio_unitario; /* Precio de cada pieza. */ } tipo_pieza; int _tmain(intargc, _TCHAR* argv[]) { tipo_pieza pieza; /* Variable de tipo tipo_pieza. */ FILE *puntero_a_archivo; /* Puntero a archivo. */ /* Abrir un archivo para lectura. */ puntero_a_archivo = fopen("Piezas00.DAT","rb");
/* Leer datos del archivo y mostrarlos por pantalla */ while(fread(&pieza, sizeof(pieza), 1, puntero_a_archivo)==1) { printf("\nNombre de la pieza => %s\n", pieza.nombre_pieza); printf("Numero de piezas => %d\n", pieza.cantidad); printf("Precio de cada pieza => %f\n", pieza.precio_unitario); } /* Cerrar el archivo abierto. */ fclose(puntero_a_archivo); getch(); return 0; }
Ejemplo: lectura Random #include <stdio.h> #include <process.h> #include <stdlib.h> #include <conio.h> typedefstruct { charnombre_pieza[15]; /* Tipo de pieza. */ intcantidad; /* Número de piezas. */ floatprecio_unitario; /* Precio de cada pieza. */ } tipo_pieza; voidmain() { tipo_piezapieza; /* Variable de tipo tipo_pieza. */ FILE *puntero_a_archivo; /* Puntero a archivo. */ intnum_registro; /* Número de registro. */ longint desplazamiento; /* Desplazamiento del registro. */ clrscr(); /* Abrir el archivo para lectura. */ if ((puntero_a_archivo = fopen("PIEZAS00.DAT","r")) == NULL) { printf("No puedo abrir el archivo PIEZAS00.DAT\n"); exit(-1); } }
Lectura Random (Cont) /* Leer el número de registro...starts at zro */ printf("Introduzca el numero de registro => "); scanf("%d", &num_registro); /* Calcular el desplazamiento del registro seleccionado. */ desplazamiento = num_registro * sizeof(pieza); /* Situarse en el lugar requerido */ if (fseek(puntero_a_archivo, desplazamiento, 0) != 0) { printf("El puntero ha superado el limite del archivo."); exit(-1); } /* Leer del archivo los datos seleccionados. */ fread(&pieza, sizeof(pieza), 1, puntero_a_archivo); /* Mostrar los datos del archivo. */ printf("\nNombre de la pieza => %s\n", pieza.nombre_pieza); printf("Numero de piezas => %d\n", pieza.cantidad); printf("Precio de cada pieza => %f\n", pieza. precio_unitario); getch(); /* Cerrar el archivo abierto. */ fclose(puntero_a_archivo);