特定のディレクトリについて、Node.JSで(日付が変更された)日付順にファイルのリストを取得するにはどうすればよいですか?ファイルシステムドキュメントには何も表示されませんでした。
これを試してみてください。
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; });
非同期バージョン(2018)
const fs = require('fs');
const path = require('path');
const util = require('util');
const readdirAsync = util.promisify(fs.readdir);
const statAsync = util.promisify(fs.stat);
async function readdirChronoSorted(dirpath, order) {
order = order || 1;
const files = await readdirAsync(dirpath);
const stats = await Promise.all(
files.map((filename) =>
statAsync(path.join(dirpath, filename))
.then((stat) => ({ filename, stat }))
)
);
return stats.sort((a, b) =>
order * (b.stat.mtime.getTime() - a.stat.mtime.getTime())
).map((stat) => stat.filename);
}
(async () => {
try {
const dirpath = path.join(__dirname);
console.log(await readdirChronoSorted(dirpath));
console.log(await readdirChronoSorted(dirpath, -1));
} catch (err) {
console.log(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();
}
アンダースコア デフォルトでascでソート 。降順が必要なため、逆順にします。
別の統計情報でソートすることもできます( ここでノードfsのドキュメントを確認してください )。 ctimeを使用することを選択します。これは、ファイルに「触れる」ことも考慮すべきだからです。
希望は助けます、