Как размер файла может быть нулевым?
Мы все время от времени сталкиваемся с «ситуацией» на наших компьютерах, которая оставляет нас полностью сбитыми с толку, например, файл с нулевым размером, но как это вообще возможно? В сегодняшнем посте SuperUser Q & A есть ответы на запутанный вопрос читателя..
Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..
Вопрос
Читатель SuperUser Евгений С хочет узнать, как размер файла может быть нулевым:
Это то, с чем я столкнулся и не мог придумать правильного объяснения. Если я создам пустой * .txt файл на моем компьютере, а затем посмотрите на его размер, он показывает размер ноль. Как это возможно? Я имею в виду, даже если сам файл пуст, он все равно должен иметь некоторый размер (даже если он просто хранит свое собственное имя). Как это можно объяснить?
Как это возможно для файла иметь размер ноль?
Ответ
Авторы SuperUser Дэвид Шварц и Корт Аммон ответят за нас. Прежде всего, Дэвид Шварц:
Это возможно, потому что там действительно нет файла. Там есть просто запись в каталоге с именем и владельцем. Запись каталога логически отличается от файла. Например, один и тот же файл может иметь более одного имени в нескольких каталогах.
К сожалению, термин «файл» не всегда означает одно и то же. Но логика размера файла исходит из модели, в которой запись каталога присоединяет файл к каталогу, тогда имена файлов и соответствующие метаданные сохраняются в каталоге.
Далее следует ответ от Cort Ammon:
Семантическое значение размера файла отличается от того, который вы используете.
Есть много размеров файлов, которые имеют смысл. Самый распространенный, и тот, который вы видите здесь, это количество байтов в файле. Если файл является пустым текстовым файлом, он может действительно содержать ноль байтов. Это число важно для программистов, потому что нам часто нужно открывать файл, читать все данные и закрывать его. Нам нужно знать, сколько байтов данных будет в файле, чтобы мы могли планировать заранее.
Другое значение вытекает из того, как большинство файловых систем хранят данные. Большинство файловых систем хранят данные в блоках. Например, файловая система может хранить данные в блоках по 64 кБ, что означает, что она никогда не выделит ничего, что не кратно 64 кБ. Это звучит неэффективно, но может сделать бухгалтерию немного проще, а часто проще, значит быстрее.
Третье значение, к которому вы обращаетесь, - это фактическое количество бит, необходимых на жестком диске для описания наличия файла. Это включает в себя информацию, которая обычно хранится отдельно от файла. Например, в Linux концепция имени файла хранится в inode для каталога, содержащего файл. [Основанный на вводе других комментариев, он (технически) хранится в данных каталога. Когда я писал это, я думал о случае с маленьким каталогом. Данные размером менее 156 байтов могут быть сохранены непосредственно в inode.] Это не часто используемое значение, потому что его очень трудно определить, не зная чрезвычайно глубокую внутреннюю работу вашей файловой системы (например, учет пространства, необходимого для хранения всех разрешений в файле). Однако, если у вас есть жесткий диск объемом 1 000 000 байт и вы хотите знать, какой объем файла может поместиться на этом жестком диске, это будет для вас очень важным значением!
Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.