无法在基于 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);
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...