2012-05-11 5 views

Antwort

68

dieses Geben Sie ein Schuss.

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(); 
      }); 

Ich verwendete die "sync" Version der Methoden. Sie sollten sie nach Bedarf asynchron machen. (Wahrscheinlich nur die readdir Teil.)


Sie können sich wahrscheinlich ein wenig verbessern die Leistung, wenn Sie die Wertedaten zwischenzuspeichern.

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. Stimmen up ... – 981

+0

getTime() undefined. – 981

0

Haben Sie versucht fs.readdir()?

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

+0

fs.readdir() kehrt nicht in chronologischer Reihenfolge. – Newtang

+2

Ich glaube nicht, dass irgendeine definierte Funktion es für Sie anordnet, aber Sie können es möglicherweise in Verbindung mit 'fs.stat (Pfad, [Rückruf])' (mit dem mtime) verwenden, um das Array zu sortieren. http://stackoverflow.com/questions/7559555/last-modified-file-date-in-node-js – Chase

0

Ich endete mit Unterstrich als gibt die Möglichkeit, für welche Statistik für die Sortierung zu verwenden.

1. die Dateien in dem Verzeichnis erhalten mit files = fs.readFileSync(directory); (man könnte Fang err falls Verzeichnis versuchen will nicht vorhanden oder Leseberechtigungen)

Dann sie auf eine Funktion wie die folgenden passieren. Das wird Ihnen die geordnete Liste zurückgeben.

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(); 
} 

Unterstrich sort by asc by default. Ich kehre es um, als ich es in absteigender Reihenfolge brauche.

Sie könnten entscheiden, nach einem anderen stat zu sortieren (check node fs documentation here). Ich wähle ctime, da es auch die Datei "anfassen" sollte.

Hoffnung hilft,

Verwandte Themen