当前位置: 首页 > Linux

Node.js获取Linux系统文件的创建时间

时间:2023-04-06 19:32:55 Linux

最近在使用Node.js的fs.readdir时遇到一个问题,就是想让读取的文件按照创建时间排序。最后的结论是,做不到!!!.以下记录研究过程。场景还原有下面的web应用,它读取服务器上的文件。fs.readdir读取的文件列表是按照文件的修改时间排序的,不是按照创建时间排序的。如果你有强迫症,这个正好击中你的“G”点。如果我们修改第一个文件夹的名称,或者在里面添加一个新的文件,那么它就会运行到最后一个。(ps:但是我想按顺序排序!!)那么,我们不能按文件创建时间排序吗?windows和linux的文件创建时间在windows系统上,一个文件有3个时间属性,分别是创建时间、修改时间和访问时间。linux上的文件也有三个时间属性,分别是访问时间(accesstime简写为atime)、修改时间(modifytime简写为mtime)和status修改时间(changetime简写为ctime)很多人误将其标记为Linux系统上的文件的ctime与windows系统上的创建时间。这是错误的。ctime中的字母c是change的缩写,不是create的缩写。当文件的元数据发生变化时,ctime也会发生变化,比如文件的权限、所有者、所属组、硬链接,当然还有文件的内容。那么,在linux系统上,是不是获取不到文件的创建时间呢?这是一个复杂的问题。关于linux系统为什么不记录文件创建时间的讨论很多。有人认为文件创建时间对大多数人来说没有用,可以换成其他的:如果文件没有被修改过,但是等于mtime,也就是最后一次写入的时间。如果文件没有被修改过,则等于ctime,即上次使用chmod的时间。如果文件没有被读取过,则等于atime,即上次读取的时间。但是什么?,总觉得有点鸡肋。自己在stackoverflow上找一个方法对读取的文件列表进行排序:constfiles=[];items.forEach((item)=>{constinfo=fs.lstatSync(path.join(dir,item));consth=m.encode(path.resolve(dir,item));files.push({name:item,extension:info.isDirectory()?'directory':item.split('.').pop().toLowerCase(),hash:h,size:info.size,is_dir:info.isDirectory(),时间:info.mtime.getTime()});});resolve({success:true,data:{tree:files.sort((a,b)=>a.time-b.time)},});});可惜是按照文件的修改时间排序的结论目前还不能按创建时间排序你遇到过这样的问题吗?你用的什么方案?欢迎讨论。