Electron 应用中 fs 模块删除 asar 文件被占用的问题与解决

在 Electron 中使用 fs 模块操作 .asar 格式文件,当执行删除操作时,很容易会遇到文件被占用的问题:

操作无法完成,因为文件已在 Electron 中打开

这是因为 require('fs') 是被 Electron 重写了,读取 .asar 格式文件时会当做目录处理。使用 fs 对象的方法对 .asar 文件路径的读取,都会产生对 asar 目录的引用。如:

import fs from 'fs';

const asarFile = 'test.asar';
fs.existsSync(asarFile); // true
fs.rmSync(asarFile); // Failed!

若想将 .asar 格式文件当做普通文件处理,则应使用 require('original-fs'),它会返回未经重写的 fs 对象。

参考如下示例代码对比一下即可明白:

import fs from 'fs';
import ofs from 'original-fs';

const asarFile = 'test.asar';

ofs.statSync(asarFile).isFile(); // true
fs.statSync(asarFile).isFile(); // false
fs.statSync(asarFile).isDirectory(); // true

所以当希望将 asar 文件当做普通文件处理时,应使用 original-fs 模块。示例:

import ofs from 'original-fs';

const asarFile = 'test.asar';
ofs.existsSync(asarFile); // true
ofs.rmSync(asarFile); // success!
点赞 (0)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code