Node.js递归读取目录筛选gif文件后复制到新目录报错如何解决
错误原因
fse.copyFileSync() 是单文件复制接口,仅支持传入单个源文件路径(字符串/Buffer/URL类型)作为第一个参数,你传入了存储多个文件路径的数组,因此触发类型错误。
注意:你之前的代码里筛选后的数组变量名拼写为
fileteredFiles,注意和后续代码的变量名保持一致,避免引用错误。
解决方法
你需要遍历筛选得到的文件路径数组,逐个执行复制操作,同时注意拼接正确的目标文件路径,避免覆盖文件。
前置依赖
需要引入Node.js内置的path模块处理路径:
const path = require('path')
同步批量复制实现
const fse = require('fs-extra') // 先确保目标目录存在,不存在会自动递归创建 fse.ensureDirSync('./outputDir') filteredFiles.forEach(srcFilePath => { // 提取源文件的文件名(含后缀) const fileName = path.basename(srcFilePath) // 拼接得到目标文件完整路径 const destFilePath = path.join('./outputDir', fileName) // 执行单文件复制 fse.copyFileSync(srcFilePath, destFilePath) })
异步批量复制实现(推荐)
异步实现不会阻塞Node.js事件循环,适合文件数量较多的场景:
const fse = require('fs-extra') // 异步创建目标目录 await fse.ensureDir('./outputDir') // 并行执行所有复制任务 await Promise.all( filteredFiles.map(async srcFilePath => { const fileName = path.basename(srcFilePath) const destFilePath = path.join('./outputDir', fileName) await fse.copy(srcFilePath, destFilePath) }) )
内容的提问来源于stack exchange,提问作者mohamed mostapha
相关产品推荐
相关产品推荐

