首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NodeJS文件系统(fs)复制asar文件

使用NodeJS文件系统(fs)复制asar文件
EN

Stack Overflow用户
提问于 2017-07-13 01:17:29
回答 3查看 1.6K关注 0票数 1

我的目标是使用NodeJS的文件系统复制.asar文件。我有一个文件路径,需要将.asar文件复制到另一个目标。

文件路径示例:

代码语言:javascript
复制
C:/Users/redacted/Documents/ExampleElectronApp/example.asar

我需要将这个文件(归档)复制到另一个目录。

之前,我用一个遍历和复制函数复制了这个文件,但是它最终创建了一个名为filename.asar的目录,而不是一个名为filename.asar的实际文件,这个函数似乎正确地工作在所有其他文件和文件夹上(除了.asar存档)。

我已经尝试过的

1:使用读和写流复制存档。

代码语言:javascript
复制
var fs = require('fs');
fs.createReadStream('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar').pipe(fs.createWriteStream('C:/Users/redacted/Desktop/test.asar'));

这最终导致了一个错误:

它说找不到这个文件,但我可以向您保证,复制源路径确实会引导我找到.asar文件。

2:使用asar要求创建一个包。

代码语言:javascript
复制
var fs = require('fs');
var asar = require('asar');

asar.createPackage('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar', 'C:/Users/redacted/Desktop/test.asar', function() {
  console.log('done.');
})

虽然此函数确实记录了正确的“完成”消息,但该副本似乎并不成功。目标目录中没有显示新的文件或文件夹。

先谢谢大家。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-13 03:35:19

我最终成功的方式是重命名.asar文件,然后在复制它们之后将它们重命名。下面是我复制.asar文件的最后一个源代码:

代码语言:javascript
复制
var filePathSource = path.join(__dirname, 'default_app.asar')
var filePathTarget = path.join(__dirname, 'test.txt')

var filePathSourceNew = filePathSource.slice(0, -5) + ".txt";
console.log(filePathSourceNew);

fs.rename(filePathSource, filePathSourceNew, function(err) {
    if (err) {
      console.log('ERROR: ' + err);
    } else {
      var stream = fs.createReadStream(filePathSourceNew).pipe(fs.createWriteStream(filePathTarget));
      stream.on('finish', function () {
        fs.rename(filePathSourceNew, filePathSource, function(err) {
            if (err) {
              console.log('ERROR: ' + err);
            } else {
              fs.rename(filePathTarget, filePathTarget.slice(0, -4) + ".asar", function(err) {
                  if (err) {
                    console.log('ERROR: ' + err);
                  } else {
                    console.log("Complete Asar Copy");
                  }
              });
            }
        });
      });
    }
});
票数 1
EN

Stack Overflow用户

发布于 2019-04-11 13:13:26

也许可以在fs模块中禁用对asar的支持,如下所示:

代码语言:javascript
复制
process.noAsar = true

这是文档:https://electronjs.org/docs/tutorial/application-packaging#treating-an-asar-archive-as-a-normal-file

票数 3
EN

Stack Overflow用户

发布于 2017-07-13 02:05:41

您可以使用NODEJS模块的"路径“。

代码语言:javascript
复制
const path = require('path')
filePathSource = path.join(__dirname, 'a', 'b', 'c', 'source.asar') 
filePathTarget = path.join(__dirname, 'a', 'b', 'c', 'target.asar')    
fs.createReadStream(filePathSource).pipe(fs.createWriteStream(filePathTarget));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45069920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档