【问题标题】:How can I use Node.js fs to sort a set of folders according to their created date?如何使用 Node.js fs 根据创建日期对一组文件夹进行排序?
【发布时间】:2022-01-01 02:35:36
【问题描述】:

我正在构建一个 node.js 应用程序,我需要在其中读取父文件夹中的所有文件夹并按照它们在页面上创建的顺序显示它们的名称。这是我目前所拥有的:


function getMixFolders() {
    const { readdirSync } = require('fs');
    
    const folderInfo = readdirSync('./shahspace.com/music mixes/')
        .filter(item => item.isDirectory() && item.name !== 'views');
    
    return folderInfo.map(folder => folder.name);
}

如您所见,我还没有实现排序。这是因为 readdirSync 没有返回我需要的信息。它返回的唯一内容是文件夹的名称和称为 Symbol(type) 的东西(这似乎表明它是文件夹还是文件)。

还有其他方法可以获取有关我从父文件夹中读取的文件夹的更多详细信息吗?具体是创建日期?

【问题讨论】:

    标签: node.js date sorting directory fs


    【解决方案1】:

    nodejs 中没有超级高效的方法来获取目录列表并获取每个项目的统计信息(例如 createDate)。相反,您必须将列表提取到您感兴趣的文件/文件夹,然后在每个文件/文件夹上调用 fs.statSync()(或类似变体之一)以获取该信息。这是一个看起来像你想要的工作版本:

    1. 使用{withFileTypes: true} 选项获取目录列表
    2. 仅过滤到文件夹
    3. 忽略任何名为“views”的文件夹
    4. 获取每个文件夹的createDate
    5. 按 createDate 升序对结果进行排序(最旧的文件夹在前)

    这段代码可以作为它自己的程序运行来测试:

    const fs = require('fs');
    const path = require('path');
    
    const mixPath = './shahspace.com/music mixes/';
    
    function getMixFolders() {
        const folderInfo = fs.readdirSync(mixPath, { withFileTypes: true })
            .filter(item => item.isDirectory() && item.name !== 'views')
            .map(folder => {
                const fullFolderPath = path.join(path.resolve(mixPath), folder.name);
                const stats = fs.statSync(fullFolderPath);
                return { path: fullFolderPath, ctimeMs: stats.ctimeMs }
            }).sort((a, b) => {
                return a.ctimeMs - b.ctimeMs;
            });
        return folderInfo;
    }
    
    let result = getMixFolders();
    console.log(result);
    

    如果您希望最终数组只是没有 createDates 的文件夹名称,您可以再添加一个 .map() 来转换最终结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多