Title: Archivos I
1Archivos (I)
- Clase 20
- Introducción a la Programación
- Marcos Sepúlveda(marcos_at_ing.puc.cl)
2Resumen del último capítulo
- Aprendimos como manejar arreglos de caracteres
(strings) - El final del string está marcado por un caracter
especial ( \0) - Operaciones predefinidas en string.h
- strlen, strcpy, strcmp, strchr, strstr
3Almacenamiento secundario
- Los computadores manipulan datos almacenados en
su memoria principal (almacenamiento primario) - Sin embargo, esta memoria es limitada y volátil,
por lo que se hace necesario emplear otro tipo de
almacenamiento que sea perdurable y cuya
disponibilidad (en cuanto a espacio y costo) sea
más conveniente.
4Dispositivos de almacenamiento secundario más
conocidos
- Discos magnéticos (discos duros)
- Diskettes (discos flexibles)
- Discos ópticos (CD-ROMs)
- Cintas magnéticas (usadas para respaldos)
- Pen drive
5Sistema de archivos
- Es una abstracción del sistema operativo, que
permite operar con distintos dispositivos de
almacenamiento secundario de una forma estándar. - El sistema de archivos tiene una organización
jerárquica - Operaciones típicas con archivos
- Leer
- Escribir
- Cambiar el nombre
- Crear una carpeta
- Borrar un archivo o una carpeta
6Tipos de archivos
- Los archivos pueden ser de distintos tipos,
dependiendo del tipo de datos que almacenen.
Podríamos citar - Archivos de texto, cuyos datos están en formato
ASCII - Programas ejecutables en formato binario
- Imágenes (bitmaps, jpeg, gif)
- Sonido (wav)
- Video (avi)
- Sin embargo, en este curso nos limitaremos a
trabajar con archivos que guardan datos en
formato de texto (ASCII) - Las siguientes funciones pertenecen a la librería
stdio.h
7Apertura de un archivo fopen
- Sintaxis
- FILE descriptor
- descriptor fopen("nombre-fisico",
"modo-apertura") - Notas
- FILE es un nuevo tipo de datos
- descriptor contiene un numero que representa al
archivo - descriptor vale NULL si el archivo no se puede
abrir - Modos de apertura
- r abre archivo de texto para lectura
- w crea archivo de texto para escritura (se
pierde contenido anterior) - a abre archivo de texto para escribir al final
- r abre archivo de texto para actualización
(lectura y escritura) - b binario (se agrega para archivos que no son
texto, p.ej. "rb")
8Lectura de un archivo fscanf
- ok fscanf(descriptor, "cadena-de-control",
- lista-de-argumentos)
- Retorna
- Un valor entero que habitualmente será cero.
- Sin embargo, cuando el archivo del que se están
leyendo los datos se termine, la función
retornará la constante EOF.
9Escritura a un archivo fprintf
- n fprintf(descriptor, "cadena-de-control",
- lista-de-argumentos)
- Retorna
- Número de caracteres impresos (enviados al
archivo), o - Un número negativo en caso que se haya producido
un error.
10Cerrar un archivo fclose
- El archivo se debe cerrar con
- fclose(descriptor)
- Esto asegura que
- Todo se escriba realmente en el disco
- Se libera memoria
11Ejemplo suma los valores que están en el archivo
datos.txt
- include ltstdio.hgt
- main()
- FILE fp
- int num, suma
-
- fp fopen("datos.txt", "r")
- suma 0
- while ( fscanf(fp, "d", num) ! EOF )
- suma suma num
-
- printf("La suma es d\n", suma)
- fclose(fp)
12Lectura de argumentos desdela línea de comandos
- Tanto en Windows como en Unix (Linux), un
programa puede ser invocado desde la línea de
comandos. - Un programa en C puede reconocer con que
argumentos (similares a parámetros de las
funciones) está siendo invocado.
Ej Uso de comando ls con parámetros
13Cómo leer esos argumentos desde un programa en C?
main(int argc, char argv) int
i printf(Programa en ejecucion s\n",
argv0) printf(Con los siguientes
argumentos\n") for (i1 iltargc
i) printf("\td s\n", i,
argvi)
- El número de argumentos se almacena en argc
- Cada argumento se almacena en el string argvi
- argv0 es el nombre del programa
14Cómo leer esos argumentos desde un programa en C?
- Los nombres argc y argv son simples
identificadores, por lo que se pueden cambiar. - Sin embargo, es común usar estos nombres y no
otros. - argc (abreviatura para argument counter, o
contador de argumentos). - argv (abreviatura para argument vector, o vector
de argumentos) - Es un arreglo de strings, cuyas posiciones están
ocupadas desde la cero hasta argc-1.
15Lectura y escritura de caracteresgetc y putc
- Lectura de un carácter
- c getc(arch)
- c es el carácter leído
- c es EOF si llegó al final del archivo
- c es lt0 si no pudo leer
- Escritura de un carácter
- ok putc(c, arch)
- ok retorna lt0 si no pudo escribir
16Ejemplo como copiar de un archivo a otro?
Versión A
- c getc(Origen)
- while (c!EOF)
- putc(c, Destino)
- c getc(Origen)
Versión B
while ((c getc(Origen))!EOF) putc(c,
Destino)