为什么我完成的种子(有时)没有写入磁盘?

时间:2019-12-25 20:21:43

标签: javascript node.js electron webtorrent

我尝试用电子和Webtorrent编写一个小的torrent客户端。乍一看一切都很好,但有时在种子下载完成后,结果文件并没有写入磁盘。

我的项目是通过SimulatedGREG / electron-vue样板设置的。

这是我的洪流客户端类的代码:

const WebTorrent = require('webtorrent');
const client = new WebTorrent();  
export default class TorrentClient {
  download (downloadInfo) {
    console.log('download torrent from magnet link:', downloadInfo.magnetLink);

    let torrent = client.add(downloadInfo.infoHash);
    torrent.on('download', function (bytes) {
      console.log('just downloaded: ' + bytes);
      console.log('total downloaded: ' + torrent.downloaded);
      console.log('download speed: ' + torrent.downloadSpeed);
      console.log('progress: ' + torrent.progress);
    });
    torrent.on('done', function () {
      console.log('done...');
    });
  }
}

2 个答案:

答案 0 :(得分:1)

下载后,Electron应用程序是否关闭? (如果是前者,则需要一种方法来延迟关机,直到您确定写入已完成。例如,确保没有未解决的承诺。)

如果没有将所有内容都写入磁盘,是否会发生done消息?

您需要向代码中添加两个错误处理程序,这很可能会解释该问题。

客户有an error handler

种子对象也有an error handler

答案 1 :(得分:0)

更新:我已解决问题。

调试了webtorrent使用的fs-chunk-store后,我发现在将数据写入磁盘之前就抛出了错误。当调用fs.mkdir为下载目标创建新路径时发生错误(ENOENT:无此类文件或目录,mkdir'path / to / folder')。没有回调函数作为参数,错误将不会输出到stdout。

我现在的解决方案是使用fs-chunk-store的自定义实现,该实现允许递归创建文件夹。

相关问题