
Я также спросилродственный вопрос для Linux.
В Windows (я только что проверил):
- Размер пустой папки равен 0 байт.
- Размер пустого файла равен 0 байт.
Однако файлы и папки, очевидно, имеют имена, которые должны где-то храниться.
- Где, примерно, они хранятся?
- Является ли максимальный объем памяти, доступный для хранения этих данных, предопределенным значением или он зависит от доступного места на диске?
- Занимает ли пустой файл с коротким именем меньше места, чем пустой файл с длинным именем? (или, возможно, структура данных, в которой хранятся эти имена, имеет фиксированное количество байтов для каждого файла, которое, возможно, заполняет оставшиеся байты
\0
?) - Занимает ли пустая папка с коротким именем меньше места, чем пустая папка с длинным именем?
- Пустая папка с именем
foobar
занимает меньше места, столько же места или больше места, чем пустой файл с именемfoobar
? - Пустой файл по адресу
C:\empty.txt
занимает меньше места, столько же места или больше места, чем пустой файл по адресуC:\long\nested\path\until\the\empty\file\is\reached\empty.txt
?
решение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 вся файловая система ограничена определенным количеством "инодов" (по одному на каждый файл или каталог), которые она хранит как список записей фиксированного размера, а область всегда установлена на фиксированный процент от дискового пространства. Нередко случается, что на диске Ext4 заканчиваются иноды. Это не относится к XFS или Btrfs, которые используют динамические структуры данных (обычно B-деревья) и просто растут по требованию.
Занимает ли пустая папка с коротким именем меньше места, чем пустая папка с длинным именем? (или, возможно, структура данных, в которой хранятся эти имена, имеет фиксированное количество байтов для каждого файла, которое, возможно, заполняет оставшиеся байты \0?)
Это варьируется. Для некоторых (большинства?) файловых систем, да, имя имеет переменную длину.
Для некоторых других файловых систем, только при определенных пороговых значениях. Опять же, FAT/exFAT и UFS с их слотами каталогов фиксированного размера могут быть примерами — если слот занят, то он занят, независимо от того, хранит ли он 1-байтовое имя файла, дополненное нулевыми байтами, или 16-байтовое.
Пустая папка с именем foobar занимает меньше места, столько же места или больше, чем пустой файл с именем foobar?
Опять же, это зависит от файловой системы.
В FAT, если я правильно понимаю, они будут одинаковыми. В NTFS я подозреваю, что папка будет больше, но на данный момент я просто предполагаю.
Занимает ли пустой файл по адресу C:\empty.txt меньше места, столько же места или больше места, чем пустой файл по адресу C:\long\nested\path\until\the\empty\file\is\reached\empty.txt?
Файлсам, всегда одно и то же, так как файл не знает своего полного пути – ОС находит его, спускаясь по родительским каталогам. Это, вероятно, универсально для всех файловых систем.
Однако эти папки будут занимать некоторое ненулевое пространство.