【问题标题】:How can I find the oldest folder in a node directory?如何在节点目录中找到最旧的文件夹?
【发布时间】:2021-06-24 16:12:16
【问题描述】:

我正在尝试在我的 nodejs 应用程序的目录中查找最旧的文件夹。 现在我通过fs.readdirSync 获取文件夹名称,然后我尝试使用fs.stat 函数在for 循环中运行mtime。但它不返回任何值。

cron.schedule('* * * * *', () => {
  folders = fs.readdirSync(__dirname + '/uploads/');
  var oldestTime;
  var oldest;

  for (var i = 0; i < folders.length; i++) {
    let stats = fs.statSync(folders[i]);
    if (oldestTime == undefined || stats.mtime < oldestTime) {
      oldestTime = stats.mtime;
      oldest = folders[i];
    }
  }
  console.log("oldest folder name is:", oldest)
}

有没有更好的方法? 非常感谢!

【问题讨论】:

  • 您的程序正确。显示一些代码?请edit您的问题。
  • 好的,我更新了我的问题,这有帮助吗?

标签: node.js express timestamp fs


【解决方案1】:
folders = fs.readdirSync(__dirname + "/uploads");
var oldestTime;
var oldest;

for (var i = 0; i < folders.length; i++) {
    let stats = fs.statSync(__dirname + "/uploads/" + folders[i]);
    if (oldestTime == undefined || stats.mtime < oldestTime) {
        oldestTime = stats.mtime;
        oldest = folders[i];
    }
}
console.log("oldest folder name is:", oldest)

或使用排序来获取最旧的:

const fs = require('fs');
const cron = require("cron");
var job = new cron.CronJob('* * * * * *', function () {
    const folders = fs.readdirSync(__dirname + "/uploads");
    var oldest = folders.sort((a, b) => fs.statSync(__dirname + '/uploads/' + a).mtime - fs.statSync(__dirname + '/uploads/' + b).mtime)[0];
    console.log("oldest folder name is:", oldest)
});
job.start();

【讨论】:

  • 感谢您的回答!我应该说我在 node-cron 计划中使用它。当我尝试时,您的代码没有记录任何内容...我再次更新了代码..
  • @papafredo6 statSync 路径应添加前缀
【解决方案2】:

您使用 fs.stat() 的异步版本。请尝试使用同步(无回调)fs.statSync()。

不要忘记 readdir 返回的结果名为 . 用于当前目录,.. 用于父目录。您可能希望从您的 mtime 搜索中排除这些。

请花一些时间阅读 Javascript 异步编程模型。

【讨论】:

  • 感谢您的回答。我仍然不明白为什么我上面的代码在 fs.ststSync() 函数中很糟糕。它没有给我任何日志..
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 2010-10-24
  • 2020-02-26
  • 1970-01-01
  • 2012-11-12
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多