walk-sync Error: EBUSY: resource busy or locked?

报错的代码:

function walk(filePath) {
    const states = statSync(filePath)
    // ...
}
readdirSync("d:\\").forEach(walk)

报错信息:

Error occurred in handler for 'walk-sync': Error: EBUSY: resource busy or locked, stat 'd:\pagefile.sys'
    at statSync (node:fs:1615:3)
    at t.statSync (node:electron/js2c/asar_bundle:2:4510)
    at walk (E:\...\dist-electron\main\index.js:248:28)
    at Array.forEach (<anonymous>)
    at walkSync (E:\...\dist-electron\main\index.js:277:32)
    at E:\...\dist-electron\main\index.js:334:12
    at EventEmitter.<anonymous> (node:electron/js2c/browser_init:2:88880)
    at EventEmitter.emit (node:events:513:28) {
  errno: -4082,
  syscall: 'stat',
  code: 'EBUSY',
  path: 'd:\\pagefile.sys'
}

pagefile.sys应该是分页文件吧?请问这个怎么办呢?
谢谢。


我尝试忽略出错的文件:

let states
try {
    states = statSync(filePath)
} catch (error) {
    return
}

然后直接弹出错误窗口了:

[Window Title]
Error

[Main Instruction]
A JavaScript error occurred in the main process

[Content]
Uncaught Exception:
Error: EBUSY: resource busy or locked, lstat 'd:\pagefile.sys'

[确定]

这么写try catch有问题吗?为什么还是报错?

阅读 3.4k
2 个回答

这个应该和那你的try catch 写法没关系,报错信息已经说了 EBUSY: resource busy or locked, stat 'd:\pagefile.sys',大概是这个文件 d:\pagefile.sys 被什么占用了,然后你又去读它,看下是不是有什么程序正在操作或者打开你这个文件。

function walk(filePath) {
    if (filePath.endsWith('pagefile.sys')) {
        return; // 跳过pagefile.sys
    }
    let states;
    try {
        states = statSync(filePath);
    } catch (error) {
        console.error(`无法访问文件 ${filePath}: ${error.message}`);
        return;
    }
    // ...
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进