微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在基于 Fuse 的文件系统上打开 MS word、PDF

如何解决无法在基于 Fuse 的文件系统上打开 MS word、PDF

我正在尝试在 Mac 上使用 Node.js 实现基于 Fuse 的文件系统。我正在使用本机 (https://github.com/fuse-friends/fuse-native) 来安装文件系统。

我在本地文件系统上有一个目录,我想用挂载的文件系统进行镜像。所以如果我在挂载的文件系统上保存文件,它应该保存到镜像目录中,如果我在镜像目录中下载文件,我应该可以在挂载目录中打开它。

我已经实现了所有基本的熔断器回调,比如 read、readdir、write、getattr、chmod、chown、mknod、mkdir、rmdir

到目前为止,我能够创建、更新、删除文本文件并将其保存到已安装的文件系统。当我尝试从安装的文件系统(存在于镜像目录)中打开任何 MS word、pdf 或 pages 文件时,它给了我

Word found unreadable content in file.docx. Do you want to recover the contents of this document? If you trust the source of this document,click Yes.

当我点击恢复时,它能够成功恢复它。

我不确定发生了什么,但无法打开 word 文件

我的读取功能看起来像(我正在从镜像目录读取和打开): fs 是节点文件系统

fs.read(fd,buf,buf.length,null,(err,bytesRead,buffer) => {
      if (err) {
        Logger.info(err.message);
        return cb(Fuse.ENOENT);
      }
      const part = buffer.slice(position,position + bytesRead);
      part.copy(buffer);
      return cb(bytesRead);
    });

并打开:

const open = (path: string,flags: number,cb: Function) => {
  // Logger.info('In Open');
  try {
    const fd = fs.openSync(
      `/Users/xyz/Desktop/Fuse${path}`,toFlag(flags)
    );
    return cb(0,fd);
  } catch (err) {
    Logger.info(err.message);
    return cb(Fuse.ENOENT);
  }
};

任何帮助将不胜感激。谢谢!

解决方法

这是通过更改读取功能修复的。读错了。

try {
      const bytesRead = fs.readSync(fd,buf,length,position);
      return cb(bytesRead);
    } catch (error) {
      Logger.info(error.message);
      return cb(Fuse.ENOENT);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。