(Um pouco tarde para a resposta ...)
Como um arquivo pode ter o tamanho zero é um pouco mais complicado do que o fornecido pelas respostas acima. A pergunta está marcada como Win7, mas analisar outros sistemas de arquivos "mais simples", como FAT ou NTFS , pode ser útil, pois os conceitos são semelhantes.
O disco não "sabe" o que é um arquivo e o que é um diretório; são todos os dados em pequenos blocos. O SO distingue entre 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 SO entende é um bloco de informações que contém informações sobre arquivos, não o conteúdo dos arquivos. Uma boa analogia é uma biblioteca física e o catálogo de cartões. Pense nos blocos de informações como o catálogo de cartões e nas prateleiras como os blocos de dados (o catálogo de cartões também fica em uma estrutura semelhante a uma prateleira).
Quando você "cria" um arquivo (digamos, com o touch
comando UNIX ), o SO 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 "gravar" ele tenta encontrar um bloco de dados vazio para armazenar os dados. Mas os blocos de dados vêm em tamanhos fixos (por exemplo, 32K), convenientes para o disco chegar e o sistema operacional ler. Se você escrever apenas "Olá", a maior parte do bloco estará "vazia" (na verdade, podem não ser zeros, mas lixo do que havia antes), então a tabela agora também atualiza o tamanho para o comprimento (digamos, 5 caracteres + Fim de File) para que você não receba as coisas ruins.
Quando você atualiza o "arquivo" para um tamanho> 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 APÓS o primeiro (e assim por diante) e o comprimento é atualizado. novo comprimento (os detalhes diferem).
Você termina com 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 um arquivo movido no mesmo sistema de arquivos está piscando rapidamente enquanto uma cópia demora muito tempo. O sistema operacional precisa editar apenas dois 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 no bloco de diretório, liberando os blocos de dados do arquivo a serem realocados.
ps: Só porque o catálogo de cartões tem uma entrada para um livro não significa que ele está na prateleira (com check-out ou talvez perdido); tamanho do arquivo 0.
pps: um livro fora de lugar dentro da biblioteca implica biblioteca de pesquisa ou em termos de computador: chkdsk ou disco de reparo!
É possível obter um entendimento maior 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 estrutura e arquivos clássicos de diretórios!