Como o tamanho de um arquivo pode ser zero?

Como o tamanho de um arquivo pode ser zero?

Apenas algo que encontrei e não consegui pensar em uma explicação adequada. Se eu criar um arquivo *.txt vazio no meu PC e depois observar seu tamanho, ele mostrará 0. Mas como isso é possível? Quero dizer, mesmo que o arquivo em si esteja vazio, ele ainda deve ter algum tamanho, apenas para armazenar seu próprio nome. Como isso pode ser explicado? (Não específico do sistema operacional)

Responder1

É possível porque realmente não há arquivo. Há apenas uma entrada de diretório com nome e proprietário. A entrada do diretório é logicamente distinta do arquivo. Por exemplo, o mesmo arquivo pode ter mais de um nome em mais de um diretório.

Infelizmente, o termo “arquivo” nem sempre é usado para significar exatamente a mesma coisa. Mas a lógica do tamanho do arquivo vem do modelo em que uma entrada de diretório "anexa" um arquivo a um diretório e os nomes dos arquivos e os metadados relacionados são armazenados no diretório.

Responder2

O significado semântico de “tamanho do arquivo” é diferente daquele que você está usando.

Existem muitos tamanhos de arquivo que são significativos. O mais comum, e o que você está vendo aqui, é “o número de bytes no arquivo”. Se o arquivo for um arquivo de texto vazio, ele poderá conter 0 bytes. Esse número é importante para os programadores porque muitas vezes precisamos abrir um arquivo, “ler todos os dados” e fechá-lo. Precisamos saber quantos bytes de dados estarão no arquivo para que possamos planejar com antecedência.

Outro significado surge da forma como a maioria dos sistemas de arquivos armazena dados. A maioria dos sistemas de arquivos armazena dados em blocos. Por exemplo, o sistema de arquivos pode armazenar dados em blocos de 64kB, o que significa que nunca alocará nada que não seja um múltiplo par de 64kB. Isso parece ineficiente, mas pode tornar a contabilidade muito mais simples e, muitas vezes, mais simples significa mais rápida.

Um terceiro significado, que você está buscando, seria o número real de bits necessários no disco rígido para descrever a presença de um arquivo. Isso inclui informações que geralmente são armazenadas separadamente do arquivo. Por exemplo, no Linux, o conceito de "nome do arquivo" é armazenado no inode do diretório que contém o arquivo (editar: a partir dos comentários, tecnicamente isso é armazenado nos dados do diretório. Quando escrevi isso, estava pensando no pequeno -diretório caso. Dados menores que 156 bytes podem ser armazenados diretamente no inode). Este não é um significado comumente usado, porque é terrivelmente difícil de determinar sem conhecer o funcionamento interno tremendamente profundo do seu sistema de arquivos (você considerou o espaço necessário para armazenar todas as permissões no arquivo?). No entanto, se você tiver um disco rígido de 1.000.000 bytes e quiser saber o tamanho de um arquivo que cabe nesse disco rígido, este será um significado muito importante para você!

Responder3

O nome do arquivo é armazenado em outro lugar.

Seu disco terá um "sistema de arquivos", simplesmente um método para escolher como os nomes dos arquivos e os arquivos serão representados e interpretados no disco físico.

Na maioria dos discos do Windows, você usará um sistema de arquivos chamado "NTFS" (New Technology File System), que armazena informações de nome de arquivo na Master File Table (MFT) separada do conteúdo do arquivo. Consulte oArtigo da Wikipedia sobre tabela de arquivos mestre.

O arquivo em si terá, portanto, comprimento de 0 bytes, mas sua entrada na MFT ainda ocupará algum espaço.

Responder4

(Um pouco atrasado para a resposta...)

Como um arquivo pode ter tamanho zero é um pouco mais complicado do que o fornecido pelas respostas acima. A pergunta está marcada como Win7, mas olhando para outros sistemas de arquivos "mais simples", comoGORDOouNTFS, pode ser útil porque os conceitos são semelhantes.

O disco não “sabe” o que é um arquivo e o que é um diretório; são todos dados em pequenos blocos. O sistema operacional distingue o significado dos blocos de dados. Os primeiros são especiais, mas o restante dos blocos contém informações sobre os dados (por exemplo: nome do arquivo, comprimento do arquivo, primeiro bloco de dados que contém os dados) ou os próprios dados.

Um diretório é um “arquivo” especial cujos “dados” o sistema operacional entende ser um bloco de informações contendo informações sobre os arquivos, não o conteúdo dos arquivos. Uma boa analogia é uma biblioteca física e o catálogo de fichas. Pense nos blocos de informações como o catálogo de fichas e nas prateleiras como os blocos de dados (o catálogo de fichas também fica em uma estrutura semelhante a uma prateleira).

Quando você "cria" um arquivo (por exemplo, com toucho comando UNIX), o sistema operacional primeiro cria uma entrada em um bloco de informações (diretório), com o seguinte:

  • Nome = Meu_Arquivo.txt
  • Comprimento = 0
  • Bloco de dados inicial = N/A
  • Informações adicionais (proprietário, permissões, data de criação/atualização/modificação), etc.

Somente se houver alguns dados para "escrever" ele tentará encontrar um bloco de dados vazio para armazenar os dados. Mas os blocos de dados vêm em tamanhos fixos (digamos 32K) convenientes para o disco acessar e para o sistema operacional ler. Se você escrever apenas "Hello", a maior parte do bloco estará "vazia" (na verdade, pode não ser zeros, mas lixo do que estava lá antes), então a tabela agora também atualiza o tamanho para o comprimento (digamos 5 caracteres + Fim de Arquivo) para que você não receba as coisas ruins.

Quando você atualiza o "arquivo" para um comprimento > tamanho do bloco, o sistema operacional grava os dados no novo bloco e atualiza um bloco de dados para dizer que o arquivo continua no próximo bloco DEPOIS do primeiro (e assim por diante) e o comprimento é atualizado o novo comprimento (os detalhes diferem).

O resultado é uma coleção de blocos de dados de informações (diretórios ou listas) com informações sobre as cadeias de blocos de dados (conteúdo do arquivo).

Logicamente, isso também explica por que uma movimentação de arquivo no mesmo sistema de arquivos pisca rapidamente enquanto uma cópia demora muito. O sistema operacional só precisa editar 2 blocos de diretório para remover a entrada de um diretório (bloco de dados de informações) e adicionar a outro. Excluir um arquivo: basta remover a entrada do bloco de diretório, liberando os blocos de dados do arquivo para serem realocados.

ps: Só porque o catálogo de fichas tem entrada para um livro não significa que ele esteja na estante (retirado ou talvez perdido); tamanho do arquivo 0.

pps: Um livro perdido dentro da biblioteca implica pesquisa na biblioteca, ou em termos de computador: chkdsk ou disco de reparo!

Uma compreensão maior pode ser obtida lendo sobre inodes UNIX ou apreciando como os sistemas de controle de versão (ClearCase, TFS, Git, etc.) gerenciam não apenas arquivos e diretórios, mas também versões de arquivos e até versões de diretórios. Na maioria dos casos, tudo é armazenado em um banco de dados e apresentado ao usuário para aparecer como uma estrutura de diretórios e arquivos clássicos!

informação relacionada