Anuncios

Bienvenidos sean a este post, hoy veremos varios temas sobre los archivos.

Anuncios
Anuncios

En el postt anterior mencionamos no solo a los distintos tipos de stream, entre ello mencionamos a los archivos y tambien hemos visto las funciones, los modos y tipos que nos permiten manejar archivos en nuestro ordenador pero esto es una verdad a medias porque el manejo de los archivos no es establecido por nosotros sino por el sistema operativo, ya que el realmente sera el encargado de establecer la estructura y la forma de manejar los archivos, si bien cada sistema operativo tiene su propio filesystem pero en lo basico trabajan todos de la misma forma y lo unico que hacen es adaptar las acciones a los distintos dispositivos fisicos, por esta razon no nos preocuparemos mucho por este tema dado que C nos provee de las herramientas suficientes para trabajar con esto, pero si debemos tener algunos conceptos claros.

Anuncios

El primer concepto que hablaremos sera sobre el path de los archivos, cuando hablamos de path nos referimos a la ubicacion donde se encuentran, es decir el directorio donde estan alojados, para empezar tenemos dos formas:

  • absoluto
  • relativo
Anuncios

Cuando hablamos de un path absoluto nos referimos a todo la direccion jerarquica donde se encuentra el archivo, por ejemplo:

/home/tinchicus/progs/apps/libs/libreria.h
Anuncios

En cambio cuando hablamos de un path relativo nos referimos a una sola parte del path, por ejemplo:

libs/libreria.h
Anuncios

Como podran deducir este ultimo dependera mucho de donde estamos ubicados al momento de ejecutar el codigo, sin importar el sistema operativo tenemos un par de herramientas para poder trabajar con nuestros paths, estas son el punto (.) que se usa para indicar cual es el path actual o el directorio actual desde donde se ejecuta, por ejemplo:

./libs/libreria.h
Anuncios

Y el otro son dos puntos (..) donde le indicaremos que baje al directorio anterior, por ejemplo para cambiar el acceso a otro directorio:

../../libs/general/lib.h
Anuncios

Si tomamos este caso y lo convertirmos en un path absoluto seria como el siguiente:

/home/tinchicus/libs/general/lib.h
Anuncios

Recuerden que estas dos herramientas nos sirven tanto para sistemas basados en Unix como en DOS/Windows, la unica diferencia entre ambos es la forma de como los trabaja y la raiz del mismo, en el caso de Unix/Linux es como vimos en los ejemplos pero para DOS/Windows seria algo asi:

C:\users\tinchicus\progs\app\libs\libreria.h
Anuncios

Eso en el sistema operativo pero en nuestros codigo usualmente lo debemos trabajar de la siguiente forma para tener una mejor compatibilidad con versiones viejas del lenguaje:

C:/users/tinchicus/progs/app/libs/libreria.h
Anuncios
Anuncios

El otro concepto que debemos mencionar es el nombre del archivo, este sera el identificador del mismo, es unico por directorio pero podemos repetirlos en otros, cada sistema operativo tiene sus reglas y normas para establecerlo, por lo general tenemos una extension para identificarlo, por ejemplo el .h, pero en los tipo Unix es opcional, en cambio para los basados en DOS/Windows si es obligatorio porque en algunos identifica como debe actuar, por ejemplo los ejecutables son .exe o .com, en cambio tenemos el .bat para indicarle que es un proceso por lotes y lo ejecutara como un script, el nombre como buena practica es ideal que identifique a que esta relacionado o que hace y por lo general se tratan de usar nombres chicos en lo posible, con esto comentado procedamos a ver un ejemplo de como manejar un archivo, para ello crearemos un archivo nuevo que llamaremos ejemplo37.c y le agregaremos el siguiente codigo:

ejemplo37.c

#include <stdio.h>
#include <string.h>

int main()
{
	FILE* archivo;

	char entrada[32];
	char texto[255];
	char buffer[255];

	fprintf(stdout, "Ingresa el texto: ");
	fscanf(stdin, "%[^\n]s", &texto);
	printf("Ingresa el nombre del archivo: ");
	fscanf(stdin,"%32s", &entrada);

	archivo = fopen(entrada, "w");
	fwrite(texto, 1, strlen(texto), archivo);
	fclose(archivo);

	printf("El contenido del archivo es:\n");

	archivo = fopen(entrada, "r");
	fread(buffer, strlen(texto),1,archivo);
	printf("%s\n", buffer);
	fflush(archivo);

	fclose(archivo);

	return 0;
}
Anuncios

Un ejemplo simple para ver como trabaja tanto para escribir como para leerlo, primero definimos una variable de tipo FILE, despues tres de tipo char:

  • entrada, sera para almacenar el nombre que le pondremos al archivo
  • texto, sera para almacenar el texto que ingresaremos al archivo
  • buffer, lo usaremos para cuando debamos recuperar la informacion
Anuncios

Nuestro primer paso sera ingresar el texto para almacenar en el archivo, observen que utilizamos el modificador para negar a <newline>, esto nos permitira que podamos almacenar mas de una palabra, lo siguiente sera ingresar el nombre que le asignaremos al archivo donde almacenaremos el texto anteriormente ingresado, despues por medio de nuestra variable llamada archivo procederemos a usar fopen con el modo de escritura para crear el archivo que ingresamos anteriormente, lo siguiente sera explicar la sintaxis de fwrite para escribir nuestra linea:

fwrite(array_char, tamaño, numero_elementos, stream)
Anuncios

El primero sera el texto que escribiremos, luego el tamaño en bytes de cada elemento a escribir, despues pasaremos la cantidad de elementos a escribir, y por ultimo el stream y en este caso pasamos el objeto donde abrimos el archivo, despues simplemente por medio de fsclose lo cerramos, despues mostramos un mensaje indicando que abriremos el archivo para recuperar la informacion, volvemos a usar fsopen pero ahora le indicaremos que sera de lectura, despues usaremos a fsread, pasemos a ver su sintaxis:

fsread(array_char, tamaño, numero_elementos, stream)
Anuncios

Primero pasaremos el array donde almacenaremos la informacion, observen que en el codigo pasamos a buffer, luego pasamos el tamaño de n bytes de cada elemento leido, despues ira el numero de elementos con el tamaño anteriormente definido, por ultimo pasaremos el stream, en este caso el objeto del archivo, el siguiente paso sera mostrar el valor almacenado en buffer, limpiamos el buffer para finalmente cerrar el archivo, con todo esto comentado pasemos a ver como trabaja mediante el siguiente video

Anuncios

Observen que en el video primero ingresamos el texto que almacenaremos, luego el nombre para finalmente crearlo y luego mostrar en pantalla lo obtenido del archivo, para finalmente mostrar el directorio y vemos al archivo creado, con esto comentado vamos a tomar este codigo y vamos a hacer un par de modificacionnes:

ejemplo37.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void usar(char* cmd)
{
	fprintf(stderr, "uso: %s nombre_archivo\n", cmd);
	exit(0);
}

int main(int argc, char* argv[])
{
	FILE* archivo=NULL;

	char texto[255];
	char buffer[255];

	if (argc < 2) usar(argv[0]);

	fprintf(stdout, "Ingresa el texto: ");
	fscanf(stdin, "%[^\n]s", &texto);

	archivo = fopen(argv[1], "w");
	fwrite(texto, 1, strlen(texto), archivo);
	fclose(archivo);

	printf("El contenido del archivo es:\n");

	archivo = fopen(argv[1], "r");
	fread(buffer, strlen(texto),1,archivo);
	printf("%s\n", buffer);
	fflush(archivo);
	fclose(archivo);

	return 0;
}
Anuncios
Anuncios

El codigo tiene pequeñas diferencias, la primera es la libreria stdlib.h la cual usaremos para utilizar la funcion exit, en este caso agregamos una funcion llamada usar, esta recibira un argumento, esta funcion sera usada para indicar como debemos usar el programa ahora, donde debemos pasar el comando seguido del nombre del archivo a crear, para despues usar a exit y salir del programa, ahora en el main le agregamos la posibilidad de recibir argumentos, le agregamos el NULL al objeto de FILE, despues solo dejamos las variables para el ingreso de texto y el de recuperacion del archivo, recuerden que el nombre del archivo lo pasaremos al llamar al programa, despues tenemos un condicional donde verificamos que si argc es menor a dos llamara a la funcion anterior y saldra del programa porque no pasamos toda la informacion, despues es igual al anterior donde ingresaremos un texto y procedemos a crearlo, guardarlo y recuperarlo tal como vimos antes pero en lugar de usar a entrada usaremos la segunda posicion de argv, con todo esto comentado procedamos a ejecutar y ver como trabaja mediante el siguiente video

Anuncios

En resumen, hoy hemos visto primero dos temas que debemos tener en cuenta, como son el path y el nombre del archivo, despues vimos como se trabajan con los archivos, en el primer caso le pasamos el texto a almacenar y el nombre del archivo por medio del programa, luego modificamos el codigo para hacer lo mismo pero esta vez lo haremos por medio del prompt, espero les haya sido dee utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50