¿Cómo puede el tamaño de un archivo ser cero?

¿Cómo puede el tamaño de un archivo ser cero?

Simplemente algo con lo que me encontré y no pude pensar en una explicación adecuada. Si creo un archivo *.txt vacío en mi PC y luego miro su tamaño, muestra 0. ¿Pero cómo es eso posible? Quiero decir, incluso si el archivo en sí está vacío, aún debe tener algún tamaño, solo para almacenar su propio nombre. ¿Cómo se puede explicar esto? (No específico del sistema operativo)

Respuesta1

Es posible porque realmente no existe ningún archivo. Sólo hay una entrada de directorio con un nombre y propietario. La entrada del directorio es lógicamente distinta del archivo. Por ejemplo, el mismo archivo puede tener más de un nombre en más de un directorio.

Lamentablemente, el término "archivo" no siempre se utiliza para significar exactamente lo mismo. Pero la lógica del tamaño del archivo proviene del modelo en el que una entrada de directorio "adjunta" un archivo a un directorio y los nombres de los archivos y los metadatos relacionados se almacenan en el directorio.

Respuesta2

El significado semántico de "tamaño de archivo" es diferente al que está utilizando.

Hay muchos tamaños de archivos que son significativos. El más común, y el que estás viendo aquí, es "el número de bytes del archivo". Si el archivo es un archivo de texto vacío, es posible que contenga 0 bytes. Este número es importante para los programadores porque a menudo necesitamos abrir un archivo, "leer todos los datos" y cerrarlo. Necesitamos saber cuántos bytes de datos habrá en el archivo para poder planificar con anticipación.

Otro significado surge de la forma en que la mayoría de los sistemas de archivos almacenan datos. La mayoría de los sistemas de archivos almacenan datos en bloques. Por ejemplo, el sistema de archivos puede almacenar datos en bloques de 64 kB, lo que significa que nunca asignará nada que no sea un múltiplo par de 64 kB. Esto suena ineficaz, pero puede hacer que la contabilidad sea mucho más sencilla y, a menudo, más sencilla significa más rápida.

Un tercer significado, que usted está buscando, sería el número real de bits necesarios en el disco duro para describir la presencia de un archivo. Esto incluye información que normalmente se almacena por separado del archivo. Por ejemplo, en Linux, el concepto de "nombre de archivo" se almacena en el inodo del directorio que contiene el archivo (editar: de los comentarios, técnicamente esto se almacena en los datos del directorio. Cuando escribí esto, estaba pensando en el pequeño -caso del directorio. Los datos de menos de 156 bytes se pueden almacenar directamente en el inodo). Este no es un significado de uso común, porque es terriblemente difícil de determinar sin conocer el funcionamiento interno tremendamente profundo de su sistema de archivos (¿tuvo en cuenta el espacio necesario para almacenar todos los permisos en el archivo?). Sin embargo, si tiene un disco duro de 1.000.000 de bytes y desea saber qué tamaño de archivo cabe en ese disco duro, ¡este será un significado muy importante para usted!

Respuesta3

El nombre del archivo se almacena en otro lugar.

Su disco tendrá un "sistema de archivos", es decir, un método para elegir cómo se representan e interpretan los nombres de los archivos en el disco físico.

En la mayoría de los discos de Windows, utilizará un sistema de archivos llamado "NTFS" (New Technology File System"), que almacena la información del nombre de archivo en la tabla maestra de archivos (MFT) separada del contenido del archivo. Consulte laArtículo de Wikipedia sobre la tabla de archivos maestros.

Por lo tanto, el archivo en sí tendrá una longitud de 0 bytes, pero su entrada en el MFT seguirá ocupando algo de espacio.

Respuesta4

(Un poco tarde para la respuesta...)

¿Cómo puede un archivo tener tamaño cero? Es un poco más complicado de lo que proporcionan las respuestas anteriores. La pregunta está etiquetada como Win7, pero si analizamos otros sistemas de archivos "más simples", comoGORDOoNTFS, puede resultar útil ya que los conceptos son similares.

El disco no "sabe" qué es un archivo y qué es un directorio; son todos datos en pequeños bloques. El sistema operativo distingue el significado de los bloques de datos. Los primeros son especiales, pero el resto de los bloques contienen información sobre los datos (por ejemplo, nombre de archivo, longitud del archivo, primer bloque de datos que contiene los datos) o los datos en sí.

Un directorio es un "archivo" especial cuyos "datos" el sistema operativo entiende como un bloque de información que contiene información sobre archivos, no el contenido de los archivos. Una buena analogía es la biblioteca física y el catálogo de fichas. Piense en los bloques de información como el catálogo de tarjetas y los estantes como los bloques de datos (el catálogo de tarjetas también se encuentra en una estructura similar a un estante).

Cuando "crea" un archivo (digamos con touchun comando UNIX), el sistema operativo primero crea una entrada en un bloque de información (directorio), con lo siguiente:

  • Nombre = Mi_archivo.txt
  • Longitud = 0
  • Bloque de datos inicial = N/A
  • Información adicional (propietario, permisos, fecha de creación/actualización/modificación), etc.

Sólo si hay algunos datos para "escribir" intenta encontrar un bloque de datos vacío para almacenar los datos. Pero los bloques de datos vienen en tamaños fijos (digamos 32K) convenientes para que el disco pueda acceder a ellos y el sistema operativo los lea. Si solo escribe "Hola", la mayor parte del bloque está "vacío" (en realidad puede que no sean ceros, sino basura de lo que había antes), por lo que la tabla ahora también actualiza el tamaño a la longitud (digamos 5 caracteres + Fin de File) para que no obtengas las cosas malas.

Cuando actualiza el "archivo" a una longitud> tamaño de bloque, el sistema operativo escribe los datos en el nuevo bloque y actualiza un bloque de datos para decir que el archivo continúa en el siguiente bloque DESPUÉS del primero (y así sucesivamente) y la longitud se actualiza el nueva longitud (los detalles difieren).

Lo que obtienes es una colección de bloques de datos de información (directorios o listas) con información sobre las cadenas de bloques de datos (contenidos de archivos).

Lógicamente, esto también explica por qué un archivo que se mueve en el mismo sistema de archivos parpadea rápidamente mientras que una copia tarda mucho tiempo. El sistema operativo solo tiene que editar 2 bloques de directorio para eliminar la entrada de un directorio (bloque de datos de información) y agregarla a otro. Eliminar un archivo: simplemente elimine la entrada en el bloque del directorio, liberando los bloques de datos del archivo para ser reasignados.

PD: El hecho de que el catálogo de tarjetas tenga una entrada para un libro no significa que esté en el estante (quizás prestado o perdido); tamaño de archivo 0.

pps: Un libro extraviado dentro de la biblioteca implica buscar en la biblioteca, o en términos informáticos: ¡chkdsk o reparar disco!

Se puede obtener una mayor comprensión leyendo sobre los inodos UNIX o apreciando cómo los sistemas de control de versiones (ClearCase, TFS, Git, etc.) administran no solo archivos y directorios, sino también versiones de archivos e incluso versiones de directorios. En la mayoría de los casos, todo se almacena en una base de datos y se presenta al usuario para que aparezca como una estructura de directorios y archivos clásicos.

información relacionada