2012-05-11 1 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一部。)


あなたはSTAT情報をキャッシュする場合は、おそらく、パフォーマンスを少し向上させることができます。

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

50th vote up ... – 981

+0

getTime()は未定義です。 – 981

0

fs.readdir()を試しましたか?

http://nodejs.org/docs/v0.3.1/api/fs.html#fs.readdir

+0

fs.readdir()は年代順に返しません。 – Newtang

+2

私は定義された関数はあなたのためにそれを注文するとは思わないが、 'fs.stat(path、[callback])'(mtimeを使って)を使って配列をソートすることができるかもしれません。 http://stackoverflow.com/questions/7559555/last-modified-file-date-in-node-js – Chase

0

ソートに使用する統計情報を考慮する機会が与えられたため、アンダースコアが使用されました。

第一次のような関数に渡すその後

(あなたはケースディレクトリにキャッチERRをしようとする場合があります存在しないかの権限を読み取らない)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を使用することを選択します。これは、ファイルに「触れる」ことも考慮する必要があります。

ホープ助け、

関連する問題