Windows10环境下Node.js使用fs.stat/statSync提示文件不存在但文件实际存在
问题核心原因
- 第一是Windows路径的反斜杠转义问题:JavaScript字符串中
\是转义字符,你直接写的'C:\Users\myuser\Documents\Test.xslx'中,\U、\m、\D、\T都会被识别为转义序列,最终Node.js拿到的实际路径和你预期的完全不一致,自然会触发ENOENT错误。 - 第二是你写的异步代码存在多处语法错误,即使路径修复后也无法正常运行。
解决步骤
1. 修正路径写法
Windows路径在JS字符串中有三种正确写法:
- 用双反斜杠转义:
'C:\\Users\\myuser\\Documents\\Test.xlsx' - 用正斜杠代替(Node.js在Windows上原生支持正斜杠路径):
'C:/Users/myuser/Documents/Test.xlsx' - 用
path模块的join方法拼接路径,自动适配系统分隔符,避免手动写分隔符出错:
const path = require('path') const targetPath = path.join('C:', 'Users', 'myuser', 'Documents', 'Test.xlsx')
注意你原代码里文件扩展名写的是.xslx,正确的Excel文件扩展名是.xlsx,如果是笔误也需要核对修正
2. 修正同步代码
修正路径后同步代码可直接正常运行:
const fs = require('fs') const fileInfo = fs.statSync('C:\\Users\\myuser\\Documents\\Test.xlsx') console.log(fileInfo.size)
3. 修正异步代码
你原来的异步代码存在多处错误:Promise构造函数没有传入resolve、reject参数,fs.stat的回调参数后多了多余逗号,async函数返回的是Promise不能直接取size属性,修正后代码如下:
const fs = require('fs') const statsPromise = async () => { return await new Promise((resolve, reject) => { fs.stat('C:\\Users\\myuser\\Documents\\Test.xlsx', (error, fileInfo) => { if(error) { reject(error) } else { resolve(fileInfo) } }) }) } // 异步函数需要用await或者then获取返回结果 statsPromise().then(fileInfo => console.log(fileInfo.size)).catch(err => console.log(err))
内容的提问来源于stack exchange,提问作者Carlos E. González C.
相关产品推荐
相关产品推荐

