有没有办法强制快速内容类型确定慢速文件系统

时间:2012-03-19 17:00:13

标签: linux filesystems gtk

我有一个虚拟文件系统,它本身很慢,因为它使用Web服务作为后端(Google Docs API)。

完全正常,但有一点需要注意:GTK应用程序使用GtkFileChooser,它试图确定文件的内容类型以显示图标或其他内容。当遇到无法通过扩展识别的文件时,它会读取初始数据块以尝试使用它来确定文件类型。在我的情况下,这会导致整个文件从网络下载,这极大地减慢了文件对话框中的目录列表。

事实证明,Gio(后端为GtkFileChooser)支持2种模式,用于内容类型发现常规(具有属性'standard :: content-type')和fast('standard :: fast-content-type'),仅查看文件扩展名。但是,似乎GtkFileChooser仅查询'standard :: content-type'。

GTK是否真的总是尝试使用慢速算法进行内容类型发现?即使已知像NFS这样的慢文件系统?

有没有办法挂载我的文件系统,只能使用快速内容类型发现?

1 个答案:

答案 0 :(得分:2)

查看glib的源代码,我相信没有办法强制安装在操作系统文件系统层次结构中的虚拟文件系统的快速内容类型发现。从gio的POV,它是一个本地文件系统,因此它假定它具有快速读取访问权限。其他远程文件系统(如NFS)不受影响,因为精确的内容类型发现只需要查看前4KB的数据。

因此,对于您的情况,我建议采用以下解决方案:

  1. 下载glib的源代码。在Ubuntu中,您可以输入以下命令:

    apt-get source glib2.0
    
  2. 打开文件gio/glocalfile.c

  3. 找到函数get_content_type
  4. 在函数开头添加以下行:

    fast = 1;
    
  5. 编译glib。

  6. 在系统位置安装glib,或使用LD_PRELOAD加载新的gio库。
  7. 希望这会有所帮助。如果您需要更多详细信息,请随时告诉我。