¿Qué es un archivo?
Cuando nos referimos a un archivo o fichero informático, estamos refiriéndonos a una secuencia de bytes de información que están almacenados en algún tipo de memoria, como puede ser un medio de almacenamiento secundario, o CD/DVD, una memoria USB, una tarjeta SD, etc.
Además, estos archivos estarán organizados sobre un sistema de archivos o file system, es decir, lo que nosotros llamamos formatos (NTFS, ext4, HFS,…). A su vez, también podemos tener carpetas o directorios donde agrupar los archivos si se desea, manteniendo la información más ordenada y organizada.
Los archivos también tienen una serie de elementos básicos, como es el nombre del archivo que lo identifica, la extensión que identificará el formato (p.e.: .jpg, .avi, .zip, .c), los metadatos (fecha de creación, fecha de modificación, propietario, tamaños…), y el contenido del archivo en sí (los bytes que contienen la información como tal y que puede representar texto, binarios,…).
Operaciones con archivos
Con los archivos se pueden realizar diferentes operaciones, como por ejemplo:
- Crear: los archivos pueden ser creados por un usuario o por un software. Para ello, se usa una llamada al sistema, como puede ser creat().
- Abrir: los archivos se pueden abrir para acceder a la información que contienen, tanto para leer como para escribir en ellos. Esto otro también necesita de una llamada al sistema como open().
- Cerrar: una vez ya no se necesita, también puedes cerrar el archivo. Para esto se emplea la llamada al sistema close().
- Modificación: como he comentado, también se puede escribir en él para modificar su contenido, o sus detadatos, etc.
- Texto: este tipo de archivo contiene, como su nombre indica, texto. Puede ser texto plano o en binario. Estos archivos también pueden contener, por ejemplo, código fuente, que son también archivos de texto plano para luego ser compilados o interpretados, según el lenguaje.
- Datos: para contener datos de entrada y de salida que son usados por programas para su procesamiento. También se pueden englobar en este grupo las bases de datos, que son una jerarquía de objetos o información ordenada. Incluso puede haber archivos de datos pertenecientes al propio sistema operativo, como algunos de controladores, bibliotecas compartidas, etc.
- Audio: por supuesto, también los hay de audio, donde se contienen los bytes necesarios para poder reproducir el sonido.
- Vídeo: también los hay de vídeo, que puede ser una consecución de frames o fotogramas que pueden ir acompañados de sonido o no.
- Imagen:
- Imagen 3D: contienen imágenes modeladas de forma tridimensional.
- Imagen rasterizada o mapa de bits: las imágenes rasterizadas son aquellas que se componen de una serie de píxeles, con los colores definidos para cada uno de estos píxeles.
- Imagen vectorial: las imágenes vectorizadas están formadas por objetos geométricos dependientes y atributos que definen sus propiedades.
- Ejecutable: es un tipo de archivo en formato binario que contiene instrucciones y datos que definen un programa. De esta manera, puede ser cargado en la memoria RAM para que sea procesado por la CPU. Dentro de este tipo también podemos tener otros archivos similares, aunque suelen ser más pequeños y empleados por los programas ejecutables, como son los plugins o módulos capaces de extender las capacidades de estos programas.
- Web: contienen código para creación de páginas webs o web apps, y pueden ser procesados por los navegadores web.
- Empaquetados: son archivos o conjunto de archivos que están empaquetados en un único archivo. Por ejemplo, pueden ser tarballs de copias de seguridad, imágenes de disco, instantáneas, etc.
- Codificado/cifrado: son ficheros que contienen un formato codificado o que han sido cifrados para evitar que el contenido pueda ser accedido por terceros sin autorización.
- Otros: también puede haber otros tipos de archivos, pero los anteriores son los más conocidos.
- Texto: .txt, .docx, .odt, .rtf, .c, .js, .vhdl, .cpp,…
- Datos: .csv, .ppt, .pdf, .xml, .pct, .sql, .db, .mdb, .fnt, .fon, .ttf, .sys, .dll, .a, .ink, msi, .ics,…
- Audio: .mp3, .ogg, .m4a, .wav,…
- Vídeo: .flv, .mp4, .avi, .mpg, .mkv, …
- Imagen:
- Imagen 3D: .obj, .3dm, .max,…
- Imagen rasterizada o mapa de bits: .bmp, .png, .tiff, .psd, .jpg, .gif,…
- Imagen vectorial: .ai, .svg, .spg, .eps,…
- Ejecutable: .apk, .rom, .gam, .exe, .jar, …
- Web: .html, .php, .aspx,…
- Empaquetados: .zip, .rar, .zx, .7z, .gz, .bz2, .tmp, .tar, .bak, .tape, .dmg, .iso, .mdf, …
- Codificado/cifrado: .hgx, .mim, .uue, .cypher, .cyp, .gpg, .axx, .key, .cha, .kdbx, .epm, …
- Extensión: la extensión que acompaña al nombre de los archivos puede ser usada por los sistemas operativos para identificar del tipo de archivo que se trata. Por ejemplo, Windows, DOS, y otros sistemas pueden usar la extensión como identificador. Pero esto tiene sus problemas, porque si se cambia la extensión, se podría interpretar como otro tipo de archivo.
- Metadatos: algunos sistemas también pueden emplear metadatos internos para identificar el archivo.
- Encabezado: el encabezado o header también puede ser leído por el sistema para tratar de identificar el formato.
- Magic number: este método empleado por sistemas Unix o Unix Like, como Linux, emplea un identificador que se almacena dentro del propio archivo. Suele ser 2 bytes de información al comienzo. Por ejemplo, podría ser un código, una etiqueta, o un shebang.
- Type codes: macOS también puede emplear ciertos códigos que se almacenan en el sistema de archivos para identificar los formatos. Estos códigos se conocen como OSTypes y son una secuencia de 4 bytes.
- UTI (Uniform Type Identify): se trata de un identificador empleado en macOS para reemplazar al método anterior.
- Atributos extendidos: algunos sistemas, como IBM OS/2, también empleaba atributos extendidos para identificar formatos, como el .TYPE.
- MIME Type: es otra forma de identificar los formatos, especialmente en Internet. Es usada por los navegadores webs, así como sistemas como AmigaOS, BeOS, MorphOS, Unix y Unix-like, etc.
- Otros: también existen otras formas menos comunes, como el PUI, FFID, identificación basada en contenido, etc.
- Conversión entre tipos: convertir de un formato a otro no tiene mucho sentido. Generalmente no se puede pasar de un tipo a otro, ya que no tiene sentido convertir por ejemplo un archivo de vídeo a un archivo de texto. Tampoco tendría mucho sentido convertir un binario ejecutable en un archivo de imagen. Sin embargo, en algunos casos sí que se puede hacer una conversión de un tipo a otro, y que tiene sentido. Por ejemplo, imagina que conviertes un archivo tipo vídeo en un archivo tipo audio, puesto que quieres convertir un videoclip de una canción en un archivo de solo música para reproducirlo. Otro caso de ejemplo sería si quieres convertir un .jpg en un documento PDF, es decir, una imagen a un archivo de datos.
- Conversión entre formatos: este otro caso no está tan limitado como el anterior, pero también existen algunas limitaciones. Por ejemplo, podemos convertir un .png que suele ser más pesado en un .jpg para que su tamaño se reduzca para subirlo a una web. O podemos convertir un .avi en un .mp4 para pasar de un codec a otro y que el vídeo pueda ser reproducido en un reproductor o dispositivo que no admitía el formato .avi. O tal vez podemos convertir de un .docx a un .odt para usar el formato nativo de las suites ofimáticas libres u otras alternativas de software…