You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中fs.readdir读取GIF文件为何输出空数组?

问题原因及修复方案

1. 异步执行顺序错误

fs.readdir是异步IO操作,它的回调函数要等目录读取完成后才会执行,但你写的console.log(array)是在fs.readdir调用后立刻执行的——这时候回调还没运行,array根本没被填充,自然输出空数组。

2. 文件名匹配逻辑漏洞

  • 正则/gif/会匹配任何包含gif的文件名,比如abcgif.txt这种非gif后缀的文件也会被误选,不符合“只找.gif后缀文件”的需求。
  • file.search(pattern)>0的判断有问题:如果文件名是gif.gif,search返回0,这时候>0的条件会把它排除;要是文件名是test.gif,虽然能匹配,但逻辑完全是碰运气,不是正确的后缀匹配方式。

修复后的代码

方案1:用回调处理异步

const testFolder = '../assets';
const fs = require('fs');

fs.readdir(testFolder, (err, files) => {
  // 先处理错误,避免崩溃
  if (err) {
    console.error('读取目录失败:', err);
    return;
  }
  // 筛选以.gif结尾的文件,用endsWith更直观
  const gifFiles = files.filter(file => file.endsWith('.gif'));
  console.log(gifFiles);
});

方案2:用async-await简化异步逻辑

const testFolder = '../assets';
const fs = require('fs');

async function getGifFiles() {
  try {
    const files = await fs.promises.readdir(testFolder);
    const gifFiles = files.filter(file => /\.gif$/.test(file));
    console.log(gifFiles);
  } catch (err) {
    console.error('读取目录失败:', err);
  }
}
getGifFiles();

内容的提问来源于stack exchange,提问作者Lucifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:53:26