Недавно я узнал, что разные ОС и даже разные файловые системы в одной ОС поддерживают разные подмножества временных меток, возвращаемых lstat
.
Объект Stats
*Возвращаемое значение 1008 * дает нам четыре раза, каждый в двух разных вариантах.
js Объекты даты:
atime
: последний раз, когда к этому файлу обращались выражается в миллисекундах с начала эпохи POSIX mtime
: в последний раз этот файл изменялся ... ctime
: в последний раз состояние файла было изменено ... birthtime
: время создания время создания этого файла
(atimeMs
, mtimeMs
,ctimeMs
и birthtimeMs
- это js версии объекта Date каждого из перечисленных выше)
«Изменено» означает, что содержимое файла было изменено путем записи в него и т. Д. «Изменено» означает метаданные файла, такие как владельцыи разрешения были изменены.
Linux традиционно никогда не поддерживал концепцию времени рождения, но какболее новые файловые системы поддерживали его, недавно в него добавили поддержку, надеюсь, для всех соответствующих слоев стека Linux, если я правильно прочитал.
Но Windows и Mac поддерживают время рождения, как и их собственные файловые системы.
С другой стороны, Windows традиционно не поддерживала концепцию изменения файла отдельно от модификации файла.Но для соответствия POSIX добавлена поддержка на уровне API и NTFS.(Похоже, он не отображается нигде в графическом интерфейсе или командной строке).FAT fs не поддерживает его.
Когда я вызываю lstat
для файла в Windows на диске NTFS, результаты для ctime
выглядят хорошо.Когда я вызываю его для файла на диске FAT, ctime
содержит мусор.(В моем случае это всегда 2076-11-29T08:54:34.955Z
для каждого файла.)
Я не знаю, является ли это ошибкой.
Я не знаю, что birthtime
возвращает в Linux прифайловые системы, которые не поддерживают это.Надеюсь, null
или undefined
, но, возможно, также мусор.Я также не знаю, что Linux или Mac возвращают в ctime
для файлов на томах FAT.
Так есть ли способ в Node получить информацию о том, какие из этих функций поддерживаются для данного файла / пути/ фс?