Каким образом пустые файлы и папки могут занимать нулевые байты в Windows?

Я также задал родственный вопрос по Linux.


В Windows (я только что тестировал):

  • Размер пустой папки равен 0 байтам.
  • Размер пустого файла равен 0 байтам.

Однако файлы и папки, очевидно, имеют имена, которые необходимо где-то хранить.

  • Где они примерно хранятся?
  • Является ли максимальный объем памяти, доступный для хранения этих данных, заранее определенным или зависит от доступного места на диске?
  • Пустой файл с коротким именем занимает меньше места, чем пустой файл с большим именем? (или, возможно, структура данных, в которой хранятся эти имена, имеет фиксированное количество байтов для каждого файла, которое, возможно, заполняет оставшиеся байты с помощью ?)
  • Пустая папка с коротким именем занимает меньше места, чем пустая папка с большим именем?
  • Пустая папка называется foobar занимает меньше места, такое же пространство или больше места, чем пустой файл с именем foobar?
  • Создает пустой файл в C:empty.txt занимает меньше места, такое же пространство или больше места, чем пустой файл в C:longnestedpathuntiltheemptyfileisreachedempty.txt?

1 ответ
1

Я также задал родственный вопрос по Linux.

Разница, если она есть, не между Windows и Linux (и вы действительно собираетесь задать тот же вопрос для macOS, для Solaris и т. Д.?), А между фактическими файловые системы используется для хранения файлов на диске.

Однако, хотя каждая ОС имеет свои предпочтительные файловые системы, FAT32 в Windows по-прежнему ведет себя так же, как FAT32 в Linux; NTFS в Linux работает так же, как NTFS в Windows; и так далее. В то же время разные файловые системы в одной и той же ОС могут вести себя по-разному: Ext4 и Btrfs (или FAT32 и NTFS) миль отдельно, даже если они работают на одной ОС.

Размер пустого файла равен 0 байтам.

Во всех случаях сообщаемый размер файла всегда только фактическое содержимое, а не метаданные. Практически все файловые системы, используемые в настоящее время, будут рассматривать это как две разные вещи — если вы воображаете, что файл состоит из его имени и данных, прикрепленных вместе, нет, обычно это не так.

Имя файла часто сохраняется в его родительском каталоге (что также позволяет использовать жесткие ссылки, т. е. один файл с несколькими именами). Такие длинные имена файлов могут увеличить размер родительского каталога.

Остальные метаданные, относящиеся к файлу, могут быть рядом с именем или, чаще, в отдельной области (например, в таблице индексных узлов).

Является ли максимальный объем памяти, доступный для хранения этих данных, заранее определенным или зависит от доступного места на диске?

Различается. У каждого типа файловой системы могут быть свои ограничения — некоторые имеют фиксированные максимумы, другие ограничены определенным процентом диска и т. Д.

Например, в FAT каждый каталог может иметь определенное максимальное количество «записей каталога» (при этом имена файлов в стиле MS-DOS 8.3 занимают по одной записи каждое, а длинные имена файлов занимают несколько). Это не относится к NTFS, несмотря на то, что обе они находятся в Windows.

В Ext2 / Ext4 вся файловая система ограничена определенным количеством «inodes» (по одному для каждого файла или каталога), которые хранятся в виде списка записей фиксированного размера, а область всегда устанавливается на фиксированный процент от диска. Космос. Нет ничего удивительного в том, что на диске Ext4 заканчиваются inodes. Это не относится к XFS или Btrfs, которые используют динамические структуры данных (обычно B-деревья) и будут просто расти по запросу.

Пустая папка с коротким именем занимает меньше места, чем пустая папка с большим именем? (или, возможно, структура данных, в которой хранятся эти имена, имеет фиксированное количество байтов для каждого файла, которое, возможно, заполняет оставшиеся байты с помощью 0?)

Различается. Для некоторых (большинства?) Файловых систем да, имя переменной длины.

Для некоторых других файловых систем только при определенных порогах. Опять же, FAT / exFAT и UFS с их слотами каталогов фиксированного размера могут быть примерами — если слот занят, то он занят, независимо от того, хранит ли он 1-байтовое имя файла, дополненное нулевыми байтами, или 16-байтовое.

Пустая папка с именем foobar занимает меньше места, столько же или больше места, чем пустой файл с именем foobar?

Опять же, это зависит от файловой системы.

В FAT, если я правильно понял, они были бы такими же. В NTFS я подозреваю, что папка будет больше, но на данный момент я только догадываюсь.

Пустой файл в C: empty.txt занимает меньше места, такое же пространство или больше места, чем пустой файл в C: long nested path , пока пустой файл не будет достигнут empty.txt?

Файл сам, всегда одно и то же, поскольку файл не знает своего полного пути — ОС находит его, просматривая родительские каталоги. Вероятно, это универсально для всех файловых систем.

Однако эти папки будут занимать ненулевое пространство.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *