我已经使用FUSE-JNA编写了一个保险丝镜像文件系统,该镜像本地目录。
此镜像文件系统允许我正确打开所有类型的文件,但没有问题,但它不会打开所有类型的office文件,例如.docs,.xls等。打开任何办公室文件时,请给我以下错误。
注意: 我想到了它的LibreOffice问题,所以我将其删除并安装了OpenOffice。但是得到同样的问题。 其次,当我尝试从MirrorFileSystem访问office文件时,只会弹出错误。如果通过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;
}
...
}
请指导我如何修复office文件时的常规输入/输出错误?
答案 0 :(得分:1)
Office文件并不特殊。您的文件系统实现还存在一些其他问题,您需要做更多的调试工作才能准确找出触发器和原因。触发器真的不太可能"文件是办公文件",除非你的文件系统代码中的东西根据它处理的文件类型而有不同的操作方式(在这种情况下你应该看那里)。作为第一个调试步骤,您可以比较fuse文件系统和根文件系统中文件的sha1sum
和stat
输出,看它们是否匹配。如果他们不这样做,请调整文件系统代码,以便他们这样做。您还可以启用文件系统类的日志记录,并检查它是否在任何地方返回I / O错误代码。错误消息"一般输入/输出错误"听起来就是这样。
关于权限字段被禁用的原因,因为该文件归root
所有,而您不是root
,因此您无法更改权限。文件归root所有的原因是您在stat.uid(0);
中设置了stat.gid(0);
和getattr
。 UID 0和GID 0分别用于root用户和root组。 Fuse-JNA已将当前UID和GID设置为getattr
中的默认统计属性,因此如果您想使用这些属性,请不要拨打stat.uid(0);
或stat.gid(0);
。
答案 1 :(得分:0)
感谢您的回答。
我在网上搜索,在许多网站上他们显示文件锁定的原因,例如https://forum.openoffice.org/en/forum/viewtopic.php?f=10&t=2020等
因此在保险丝中,我实现了文件锁定功能,只需返回0
我的问题解决了。现在我可以打开所有类型的办公文件了。
但我不知道,这是完美的解决方案