(С небольшим опозданием на ответ ...)
Как файл может иметь нулевой размер, немного сложнее, чем приведенные выше ответы. Вопрос помечен Win7, но рассмотрение других «более простых» файловых систем, таких как FAT или NTFS , может оказаться полезным, так как концепции похожи.
Диск не «знает», что такое файл и что такое каталог; это все данные в маленьких блоках. ОС различает значение блоков данных. Первые несколько особенные, но остальные блоки содержат либо информацию о данных (например: имя файла, длину файла, первый блок данных, содержащий данные), либо сами данные.
Каталог - это специальный «файл», чьи «данные», понимаемые ОС, являются информационным блоком, содержащим информацию о файлах, а не их содержимое. Хорошая аналогия - это физическая библиотека и карточный каталог. Подумайте о информационных блоках как о карточном каталоге, а о полках - как о блоках данных (карточный каталог также расположен в виде полки).
Когда вы «создаете» файл (скажем, с помощью touch
команды UNIX ), ОС сначала создает запись в информационном блоке (каталоге) со следующим:
- Name = My_File.txt
- Длина = 0
- Начальный блок данных = нет данных
- Дополнительная информация (владелец, права доступа, дата создания / обновления / изменения) и т. Д.
Только если есть какие-то данные для «записи», он пытается найти пустой блок данных для хранения данных. Но блоки данных имеют фиксированный размер (скажем, 32 КБ), удобный для доступа к диску и чтения ОС. Если вы пишете только «Hello», большая часть блока является «пустой» (на самом деле это могут быть не нули, а мусор из того, что было раньше), поэтому таблица теперь также обновляет размер до длины (скажем, 5 символов + конец Файл), так что вы не получите плохие вещи.
Когда вы обновляете «файл» до длины> размера блока, ОС записывает данные в новый блок и обновляет блок данных, чтобы сказать, что файл продолжается в следующем блоке ПОСЛЕ первого (и так далее), а длина обновляется. новая длина (детали различаются).
В итоге вы получаете набор информационных блоков данных (каталогов или списков) с информацией о цепочках блоков данных (содержимом файлов).
Логически это также объясняет, почему перемещение файла в одной и той же файловой системе быстро мигает, а копирование занимает много времени. Операционная система должна только отредактировать 2 блока каталога, чтобы удалить запись из одного каталога (информационный блок данных) и добавить в другой. Удалить файл: просто удалите запись в блоке каталога, освобождая блоки данных файла для перераспределения.
ps: только то, что в карточном каталоге есть запись для книги, не означает, что она находится на полке (возможно, проверена или утеряна); размер файла 0.
pps: неправильно размещенная книга в библиотеке подразумевает библиотеку поиска или в терминах компьютера: chkdsk или repair disk!
Большее понимание можно почерпнуть, прочитав иноды UNIX или оценив, как системы контроля версий (ClearCase, TFS, Git и т. Д.) Управляют не только файлами и каталогами, но также версиями файлов и даже версиями каталогов. В большинстве случаев все хранится в базе данных и представляется пользователю в виде классической структуры каталогов и файлов!