Простой ответ: потому что так определено.
Более длинный ответ: это определено таким образом, потому что некоторые операции концептуально проще:
- Если файл содержит 20 букв «А» и вы удалили все буквы «А», то этот файл станет на 20 байт короче. Та же самая операция с файлом, который состоял только из «AAAAAAAAAAAAAAAAAAAA», должна была бы иметь дело со специальным случаем исчезающего файла.
- На практике, удаление последней строки текстового файла должно осуществляться в специальном случае.
- Текстовым редакторам, которые регулярно создают резервную копию, потребуется специальный код, чтобы справиться с ситуацией, когда пользователь может удалить последнюю строку, перейти к ланчу, а затем вернуться и добавить еще одну строку. Дополнительные осложнения возникают, если некоторые другие пользователи в то же время создали файл с таким именем.
Вы можете сделать больше вещей: * Файлы журнала ошибок, как правило, создаются пустыми, заполняются тогда и только тогда, когда происходит ошибка. * Чтобы узнать, сколько ошибок произошло, вы подсчитываете количество строк в лог-файлах. Если файл журнала пуст, количество ошибок равно нулю, что имеет смысл. * Иногда вы видите файлы, где весь соответствующий текст находится в имени файла, например this-is-the-logging-directory
. Это препятствует тому, чтобы чрезмерные администраторы удаляли пустые каталоги после установки, и также предотвращает ошибки, когда программа или пользователь случайно создают файл, где программа хотела бы видеть каталог позже. git
Программа (и другие) , как правило, игнорируют пустые каталоги, и если проект / администратор / пользователь хочет иметь запись о том , что каталог существует , даже если он не имеет никакого полезного содержания (пока), вы можете увидеть пустой файл с именемempty
или empty.directory
.
Никакие операции не становятся более сложными:
- Конкатенация файлов: это просто неоперация с пустым файлом.
- Поиск строки в файле: это охватывается стандартным случаем «если файл короче поискового термина, он не может содержать поисковый термин».
- Чтение из файла: программы должны иметь дело с попаданием в конец файла, прежде чем они получат то, что ожидали, поэтому снова случай файла нулевой длины не требует дополнительного мышления для программиста: он просто нажмет конец -файл с самого начала.
В случае файлов аспект «где-то записан файл» (inode и / или имя файла) стоит поверх вышеупомянутых соображений, но файловые системы не сделали бы этого, если бы пустые файлы были бесполезны.
Как правило, все вышеперечисленные причины, кроме связанных с именами файлов, относятся к последовательностям. Прежде всего это касается строк, представляющих собой последовательности символов: строки нулевой длины являются обычным явлением внутри программ. Строки обычно запрещены на уровне пользователя, если они не имеют смысла: имя файла является строкой, и большинство файловых систем не допускает пустую строку в качестве имени файла; внутренне, при создании имен файлов из фрагментов, программа может иметь пустую строку в качестве одного из фрагментов.