Экземпляр класса fsStat возвращает объекты даты mtime, atime и ctime, но, похоже, есть API только для изменения mtime и atime (последняя модификация и доступ, я думаю). Как я могу изменить время создания, чтобы создать точную копию файла, поскольку она также будет создана в то же время, что и оригинал?
nodejs - как изменить время создания файла
Ответы (4)
В настоящее время это невозможно с самим Node, но вы можете использовать https://github.com/baileyherbert/utimes (собственное дополнение для Node), чтобы изменить время создания (также известное как btime
) файла в Windows и Mac.
undefined
сохранять поле без изменений.
- person Lapsio; 29.05.2017
btime
невозможна, но mtime
и atime
будут установлены в Linux, если они предоставлены.
- person Joran Greef; 30.05.2017
atime
, mtime
, ctime
и birthtime
(хотя birthtime
и ctime
одинаковы). Я хочу изменить их. И да, я знаю, что в UNIX ctime - это не время создания файла, а последнее обновление индекса, но неважно. Пока я не буду использовать жесткие ссылки, это время создания
- person Lapsio; 31.05.2017
birthtime
. Насколько я знаю, нет API Linux для получения или установки birthtime
. Файловые системы Linux обычно даже не имеют поля для хранения birthtime
файла (даже если у Linux есть API для его изменения). Node представляет фиктивный birthtime
на fs.stats
экземплярах в Linux, который отслеживает ctime
(что бессмысленно). Windows и Mac — это системы, поддерживающие birthtime
.
- person Joran Greef; 01.06.2017
fs.statSync
, правильный, и он действительно меняется после создания жесткой ссылки.
- person Lapsio; 01.06.2017
@ronomon/utimes
больше не поддерживается и не работает на Catalina и последней версии Node.js. Проверьте вместо этого utimes
-› github.com/ Бейлихерберт/utimes
- person Mariusz Nowak; 30.07.2020
tl;tr: это невозможно в atm (Node.js ‹= v6).
Несмотря на это, fs.stat() возвращает дата рождения файлов:
birthtime
Birth Time - Время создания файла. Устанавливается один раз при создании файла. В файловых системах, где время рождения недоступно, это поле может вместо этого содержать либоctime
, либо1970-01-01T00:00Z
(т. е. отметку времени эпохи unix0
)…До Node v0.12
ctime
занималоbirthtime
в системах Windows. Обратите внимание, что начиная с версии 0.12ctime
не является временем создания, а в системах Unix его никогда не было.
Обновление невозможно. Из https://github.com/joyent/node/issues/8252:
fs.utimes использует utime(2) (http://linux.die.net/man/2/utime), что не позволяет вам изменить ctime .
(То же самое относится и к birthtime
)
ctime
использовалось как время создания на момент написания.
- person schnittstabil; 25.10.2016
Методы fs.utimes
и fs.utimesSync
встроены в ядро Node.js. См. https://nodejs.org/api/fs.html#fs_fs_utimes_path_atime_mtime_callback.
Примечание:
Значение должно быть отметкой времени Unix в секундах. Например, Date.now() возвращает миллисекунды, поэтому перед передачей его следует разделить на 1000.
Чтобы преобразовать объект даты JS в секунды:
new Date().getTime()/1000|0
fs.utimes
обновляет только atime
и mtime
, а не поле, которое хотел OP, то есть birthtime
.
- person mrm; 03.05.2018
Если вы хотите только решить проблему (изменить время создания файла), в python есть решение. См. здесь: https://stackoverflow.com/a/4996407/6733679.