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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:18:02