2012-05-11 39 views

回答

68

给这个一杆。

var dir = './'; // your directory 

var files = fs.readdirSync(dir); 
files.sort(function(a, b) { 
       return fs.statSync(dir + a).mtime.getTime() - 
         fs.statSync(dir + b).mtime.getTime(); 
      }); 

我使用了“同步”版本的方法。你应该根据需要使它们异步。 (也许只是readdir一部分。)


你也许可以提高性能一点,如果你缓存统计信息。

var files = fs.readdirSync(dir) 
       .map(function(v) { 
        return { name:v, 
          time:fs.statSync(dir + v).mtime.getTime() 
         }; 
       }) 
       .sort(function(a, b) { return a.time - b.time; }) 
       .map(function(v) { return v.name; }); 
+0

第50张投票... – 981

+0

getTime()未定义。 – 981

0
+0

fs.readdir()不按时间顺序返回。 – Newtang

+2

我不认为任何已定义的函数会为您排序,但您可以将它与'fs.stat(path,[callback])'(使用mtime)一起用于对数组进行排序。 http://stackoverflow.com/questions/7559555/last-modified-file-date-in-node-js – Chase

0

我结束了使用下划线,因为有机会考虑用于排序的统计数据。

1日使用files = fs.readFileSync(directory);(你可能想尝试的情况下,目录抓犯错不存在或读取权限)

然后将它们传递给函数类似下面的一个获得该目录中的文件。这将返回您的有序列表。

function orderByCTime(directory, files) { 
    var filesWithStats = []; 
    _.each(files, function getFileStats(file) { 
     var fileStats = fs.statSync(directory + file); 

     filesWithStats.push({ 
      filename: file, 
      ctime: fileStats.ctime 
     }); 
     file = null; 
    }); 
    return _.sortBy(filesWithStats, 'ctime').reverse(); 
} 

下划线sort by asc by default。我按照降序顺序将其撤消。

您可以决定按其他属性排序(check node fs documentation here)。我选择使用ctime,因为它应该解释为“触摸”文件。

Hope help,

相关问题