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

Cannot open MS word, PDF on Fuse based file system

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

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

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

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

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, 0, 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, 0, length, position);
      return cb(bytesRead);
    } catch (error) {
      Logger.info(error.message);
      return cb(Fuse.ENOENT);
    }