nodejs – 如何更改文件的创build时间
fsStat类实例返回mtime,atime和ctimedate对象,但似乎只有API才能更改mtime和atime(最后修改和访问我猜)。 我如何更改创build时间来创build文件的精确副本,因为它也会创build与原始副本相同的时间?
目前无法使用Node本身,但是您可以使用https://github.com/ronomon/utimes(Node本地附加组件)来更改Windows和Mac上文件的创build时间(又名btime
)。
tl; tr:这不可能atm(Node.js <= v6)。
即使如此, fs.stat()返回文件的出生时间 :
birthtime
“出生时间” – 文件创build的时间。 创build文件时设置一次。 在出生时间不可用的文件系统上,该字段可能会保存ctime
或1970-01-01T00:00Z
(即unix时期0
)。在Node v0.12之前,
ctime
在Windows系统上birthtime
了。 请注意,从v0.12开始,ctime
不是“创build时间”,而在Unix系统上,它从来就不是。
更新是不可能的。 从https://github.com/joyent/node/issues/8252 :
fs.utimes使用utime(2)( http://linux.die.net/man/2/utime ),它不允许你改变ctime。
(同样适用于birthtime
)
如果你只想解决这个问题(改变文件创build时间),那么在python中有一个解决scheme,请参阅https://stackoverflow.com/a/4996407/6733679 。
Node.js内核中内置了fs.utimes
和fs.utimesSync
方法。 请参阅https://nodejs.org/api/fs.html#fs_fs_utimes_path_atime_mtime_callback
注意:
值应该是以秒为单位的Unix时间戳。 例如,Date.now()返回毫秒数,所以在传入之前应该除以1000。
将JS Date对象转换为秒:
new Date().getTime()/1000|0