【问题标题】:Fuse File System- general input/output error while accessing office files保险丝文件系统 - 访问办公文件时出现一般输入/输出错误
【发布时间】:2014-07-14 16:34:51
【问题描述】:

我用FUSE-JNA写了一个fuse镜像文件系统,镜像本地目录。

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

注意: 我认为它的 LibreOffice 问题,所以我将其删除并安装了 OpenOffice。但是遇到同样的问题。 其次,仅当我尝试从 MirrorFileSystem 访问办公文件时才会弹出错误。如果通过 ubuntu 默认文件系统正常访问,Office 文件可以正常打开。

所以是我的文件系统出了点问题。

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

这是我的 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;
    }
...
}

请指导我如何解决办公文件中的一般输入/输出错误?

【问题讨论】:

    标签: openoffice.org libreoffice fuse


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      感谢您的回答。

      我在网上搜索,在许多网站上,他们显示文件锁定是原因,例如https://forum.openoffice.org/en/forum/viewtopic.php?f=10&t=2020

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多