[C con Clase] Archivos binarios vs archivos de texto

Joaquin Fernandez joaquinfq en gmail.com
Mie Mar 28 16:54:42 CEST 2007


Steven Davidson escribió:
> Me temo que estoy en desacuerdo con Héctor sobre este tema. En general, recomiendo usar archivos binarios por la seguridad de la información, ahorro de espacio del fichero, y la rapidez de escritura y lectura al igual que la búsqueda.

En realidad no necesariamente se ahorraría espacio. Cuando se usan archivos binarios, se usan
estructuras de datos que son escritas por completo en el archivo. Si, por ejemplo, se definió un
char[255] pero solo se escribió "Hola" los otros 250 bytes se escriben con basura pero se escriben.
Si tenemos 2 o 3 cadenas con 254 chars, 50.000 entre 15 y 30, y 100.000 con menos de 15 la
diferencia es notoria. Y si tenemos varias variables chars en la estructura con diferencias de
tamaños tan grandes, como es lo normal es una estructura de base de datos, entonces el desperdicio
es mayor. Un ejemplo típico de ésto son los campos Nombre, Apellido y Dirección. En un archivo de
texto solo se escribe lo necesario.

Si lo que se va a almacenar, ocupa casi el mismo tamaño "útil" por registro, el archivo binario
sería la opción más rápida. La ventaja de los ficheros binarios es la rapidez de
acceder/leer/escribir/modificar los registros. Modificar/eliminar valores en archivos de texto
implica crear una copia del archivo con los datos antes+la modificación+datos después, eliminar el
archivo actual y luego renombrar la copia. Con los archivos de textos también hay que hacer algún
parser para leer/escribir los datos y la lectura de los datos y acomodo de los mismos para
introducirlos en la estructura de datos de nuestro prorama toma tiempo; por ejemplo, una búsqueda
sería un poco más larga, aunque siempre se pueden usar índices. Un formato para el que hay muchos
parser hechos es el XML, así que si Miguel quiere puede usar este formato sin mucho esfuerzo.
También hay parser para CSV que es muy cómodo de leer la información en este tipo de formatos.

Con respecto a la privacidad, cuando se usan archivos binarios y de textos, las cadenas son leíbles
fácilmente con un editor de texto, pues no se encriptan ni nada por el estilo, aunque los valores
numéricos si cuestan un poco más de leer en los binarios, así que la seguridad debe tomarse en
cuenta para cualquier tipo de archivo que se use.

También puedes optar por usar algunos de los SGBD que ya hay, entre ellos SQLite (muy fácil de
usar), Berkeley DB, QuickDB de Matricsoft, GNU GDBM, etc.

Pero como dijo Steven, la decisión de uno u otro enfoque depende mucho del tipo de proyecto que se
quiera hacer. Yo por lo general siempre hago mi propio formato de las bases de datos y creo las
clases para manejar la información.

Saludos

Joaquín




Más información sobre la lista de distribución Cconclase