nodejs – 如何更改文件的创build时间

fsStat类实例返回mtime,atime和ctimedate对象,但似乎只有API才能更改mtime和atime(最后修改和访问我猜)。 我如何更改创build时间来创build文件的精确副本,因为它也会创build与原始副本相同的时间?

tl; tr:这不可能atm(Node.js <= v6)。

即使如此, fs.stat()返回文件的出生时间

birthtime “出生时间” – 文件创build的时间。 创build文件时设置一次。 在出生时间不可用的文件系统上,该字段可能会保存ctime1970-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.utimesfs.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