代码之家  ›  专栏  ›  技术社区  ›  Syed Rahman Mashwani

Fuse文件系统-访问office文件时出现一般输入/输出错误

  •  0
  • Syed Rahman Mashwani  · 技术社区  · 11 年前

    我已经使用fuse-JNA编写了一个fuse镜像文件系统,即镜像本地目录。

    此镜像文件系统允许我正确打开所有类型的文件,没有任何问题,但它不会打开所有类型办公室文件,例如.docs、.xls等。打开任何办公室文件时,请给我以下错误。

    http://i61.tinypic.com/2wd4j9c.png

    注: 我认为它的LibreOffice问题,所以我删除了它并安装了OpenOffice。但也有同样的问题。 其次,只有当我试图从MirrorFileSystem访问办公室文件时,才会出现错误。如果通过ubuntu默认文件系统正常访问,Office文件将正确打开。

    所以我的文件系统有点问题。

    最后,(我不知道它是否与问题有关,但)当我右键单击文件时,在镜像文件系统中>财产>权限显示禁用的所有字段,如下所示

    enter image description here

    这是我的getatt()方法:

    public int getattr(final String path, final StatWrapper stat)
    {
    ....
    if (f.isFile())
        {
            stat.setMode(NodeType.FILE,true,true,true,true,true,true,true,true,true);
            stat.size(f.length());
            stat.atime(f.lastModified()/ 1000L);
            stat.mtime(0);
            stat.nlink(1);
            stat.uid(0);
            stat.gid(0);
            stat.blocks((int) ((f.length() + 511L) / 512L));
            return 0;
        }
    ...
    }
    

    请指导我如何修复office文件时的一般输入/输出错误?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Etienne Perot    11 年前

    Office文件并不特殊。您的文件系统实现还有其他一些问题,您需要做更多的调试工作,以准确地找出触发因素和原因。触发因素不太可能是“文件是一个办公文件”,除非文件系统代码中的内容根据处理的文件类型而不同(在这种情况下,您应该查看)。作为第一个调试步骤,您可以比较 sha1sum stat 从fuse文件系统和根文件系统输出文件,以查看它们是否匹配。如果没有,请调整文件系统代码,使其正常运行。您还可以启用文件系统类的日志记录,并检查它是否在任何位置返回I/O错误代码。错误消息“一般输入/输出错误”听起来就是这样。

    至于禁用权限字段的原因,这是因为该文件属于 root ,而你不是 因此您无法更改权限。文件由root拥有的原因是您设置了 stat.uid(0); stat.gid(0); 在里面 getattr .UID 0和GID 0分别用于根用户和根组。Fuse JNA已经将当前UID和GID作为默认stat属性放入 获取属性 ,所以如果你想使用这些,就不要打电话 stat.uid(0); stat.gid(0); .

        2
  •  0
  •   Syed Rahman Mashwani    11 年前

    谢谢你的回答。

    我在网上搜索了一下,在很多网站上都显示了文件锁定的原因。 https://forum.openoffice.org/en/forum/viewtopic.php?f=10&t=2020

    所以在fuse中,我实现了文件锁定函数,并简单地返回0

    我的问题解决了。现在我可以打开所有类型的办公室文件。

    但我不知道,这是完美的解决方案吗