【问题标题】:Get file type using fs/node.js使用 fs/node.js 获取文件类型
【发布时间】:2021-11-10 21:45:55
【问题描述】:

我有一个包含少量文件的文件夹,我需要获取与我在 num 变量中生成的数字匹配的文件类型/扩展名,那么有什么办法可以做到吗?

我当前的代码是:

fs.readdir(dir, (err, files) => {
  const num = (Math.floor(Math.random() * files.length) + 1).toString();
  // here I need to get file type/extension
}

files 变量返回:['1.jpg', '2.png', '3.gif']

【问题讨论】:

  • 删除的答案看起来是对的,那么你想在这里做什么?您的文件实际上没有扩展名吗?
  • @JasonS 已删除的答案只给了我 ` `(空变量)而不是扩展名,并且仅在我手动添加时才给我扩展名(我必须将 1.jpg 而不是 1需要)
  • 你在说什么?
  • @JasonS “你叫什么”是什么意思?如果您在谈论操作系统 - 它是 Windows
  • 问题不问,请更新,目的明确

标签: javascript node.js fs


【解决方案1】:

要在文件列表中查找文件而不考虑扩展名,请在列表中的文件上使用path.basenamepath.extname 来删除扩展名。对于单个搜索,请使用 files.find()

const filename = files.find(x => path.basename(x, path.extname(x)) === num.toString())

但是,出于随机选择的目的,最好简单地从files 中获取一个随机条目。原因是,如果所有文件都按顺序编号(从 1 开始),这是同一件事,但如果它们不是全部按顺序编号(从 1 开始),则上述可能会中断。

const filename = files[num] // and take away + 1 from num

【讨论】:

  • 您好,您的回答为我工作了一段时间,但现在我在尝试获取我的文件时得到undefined(使用您的第二种方法找到它,目录也不是无效的,我检查了它) ,而且我相信你的第一种方式有错字!
  • 你认为错字是什么?另外,您的文件名是否仍然按顺序编号?
  • 我的意思是,使用你的第一种方式会出现SyntaxError: Unexpected token ')' 错误,我的文件是:['723.jpg', '724.jpg', '725.jpg', '726.jpg', '727.jpg', '728.jpg', '729.jpg', '731.jpg', '732.jpg', '733.jpg', '734.jpg', '735.jpg', '736.jpg', '737.jpg', '738.jpg', '739.jpg', '740.jpg', '741.jpg', '742.jpg', '743.jpg', '744.jpg', '745.jpg', '746.jpg', '747.jpg', '748.jpg', '749.jpg', '750.jpg', '751.jpg', '752.jpg', '753.jpg', '754.jpg', '755.png', '756.jpg', '757.jpg']
  • 修复了括号。所以,你的随机数是 1-34,你的文件是 723-757。这就是为什么你会变得不确定以及为什么我包含了#2。
  • 是的,您的第一个代码现在正在运行
【解决方案2】:

您可以在 ArrayList 中生成一个随机数并获取该文件,而不是匹配整个文件名。

const fs = require("fs");
const path = require("path");

fs.readdir(__dirname, (err, files) => {
  const randomNum = Math.floor(Math.random() * files.length);
  // get the random file
  let randomFileName = files[randomNum];
  console.log(randomFileName);

  /// Get unique exts
  const exts = [...new Set(files.map((name) => path.extname(name)))];
  console.log(exts);
  const randomExt = Math.floor(Math.random() * exts.length);
  
  // Get file with random ext
  randomFileName = files.find((x) => path.extname(x) === exts[randomExt]);
  console.log(randomFileName);
});

【讨论】:

  • 我不需要生成带有随机扩展名的随机文件,我需要获取现有文件的扩展名
猜你喜欢
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2020-09-02
  • 2020-07-08
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多