В дополнение к ответу RbMm я нашел сообщение в блоге Алекса Карпа, Некоторые ограничения на использование файлов, открытых по идентификатору , в котором объясняется обоснование этого.
К сожалению,семантика для файлов, открываемых по идентификатору, немного отличается от семантики тех же файлов, если бы они были открыты по имени. Например, пространство имен имени файла допускает несколько имен для файла (жесткие ссылки), а пространство имен идентификатора - нет. Различная семантика разных пространств имен может привести к тому, что некоторые операции не будут иметь смысла.
Например, потому что NTFS допускает несколько имен для файла, если файл открывается по идентификатору, и операция, которая изменяет пространство именпопытка, какое имя должно быть затронуто? Чтобы было очень ясно, если file \ Foo \ f.txt и file \ Bar \ b.txt являются жесткими ссылками на один и тот же файл, и я открываю файл по идентификатору и пытаюсь его переименовать, какое имя следует изменить? Как насчет того, чтобы попробовать удалить?
Короче говоря, удаление файла в модели NTFS фактически означает удаление ссылки (имя) на файл. Только после того, как все ссылки на него будут удалены, в качестве побочного эффекта, сам файл может быть удален. Очень похоже на подсчет ссылок во многих языках программирования.
Гипотетически может существовать операция, которая принимает идентификатор файла и удаляет все ссылки, а также файл, но это будет совсем другая операция и потенциально хитрая (например, это будетнеобходимо выполнить проверку прав доступа для всех затронутых имен файлов, дождаться закрытия всех соответствующих дескрипторов, предотвратить появление новых имен файлов, ссылающихся на удаляемый файл, и т. д.). Поэтому в этом отношении неудивительно, что его не существует.