如何使用 Node.js fs 根据创建日期对一组文件夹进行排序?

How can I use Node.js fs to sort a set of folders according to their created date?

我正在构建一个 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 没有 return 我需要的信息。它 return 唯一的东西是文件夹的名称和称为符号(类型)的东西(这似乎表明它是文件夹还是文件)。

是否有另一种方法可以获取有关我正在从父文件夹中读取的文件夹的更多详细信息?具体创建日期?

nodejs 中没有超级有效的方法来获取目录列表并获取每个项目的统计信息(例如 createDate)。相反,您必须将列表提炼为您感兴趣的 files/folders,然后对每个列表调用 fs.statSync()(或类似变体之一)以获取该信息。这是一个工作版本,看起来可以满足您的需求:

  1. 使用 {withFileTypes: true} 选项获取目录列表
  2. 仅筛选文件夹
  3. 忽略所有名为“views”的文件夹
  4. 获取每个文件夹的创建日期
  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);

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