Node.js创建带时间戳的文件夹时报EINVAL错误如何解决
Node.js创建带时间戳文件夹EINVAL报错修复方案
报错原因
你遇到的EINVAL: invalid argument报错是因为绝大多数操作系统(Windows、macOS、Linux等)的文件命名规则禁止使用冒号:作为文件夹/文件名的合法字符,你的代码中使用:分隔时分秒,拼接后的文件夹名包含非法字符,因此创建失败。
修复方案
方案1:替换时间分隔符
将时分秒的分隔符从冒号改为合法的短横线-或下划线_即可,同时可以优化代码逻辑避免重复拼接路径:
const fs = require('fs'); const today = new Date(); const date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate(); // 替换时分秒分隔符为短横线 const time = today.getHours()+"-"+today.getMinutes()+"-"+today.getSeconds(); const folderName = './responses_' + date + '_' + time; try { // 新增recursive参数,无需手动判断文件夹是否存在,自动处理已存在的情况,还可避免并发判断的竞态问题 fs.mkdirSync(folderName, { recursive: true }) } catch (err) { console.error(err) }
方案2:使用纯数字时间戳(更简洁、唯一性更高)
如果不需要可读的年月日时分秒格式,可以直接用Date.now()生成13位毫秒级时间戳,完全无特殊字符,也不会出现同一秒创建多个文件夹重名的问题:
const fs = require('fs'); const folderName = './responses_' + Date.now(); try { fs.mkdirSync(folderName, { recursive: true }) } catch (err) { console.error(err) }
内容的提问来源于stack exchange,提问作者Mick
相关产品推荐
相关产品推荐

