2012-05-11 74 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,

相關問題