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

Dim*_*nko 6 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这样的慢速文件系统?

有没有办法安装我的文件系统,以便它只使用快速内容类型发现?

use*_*136 2

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

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

  1. 下载 glib 的源代码。在 Ubuntu 中,您可以通过键入以下内容来执行此操作:

    apt-get source glib2.0
    
    Run Code Online (Sandbox Code Playgroud)
  2. 打开文件gio/glocalfile.c

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

    fast = 1;
    
    Run Code Online (Sandbox Code Playgroud)
  5. 编译glib。

  6. 在系统位置安装 glib,或用于LD_PRELOAD加载新的 gio 库。

希望这可以帮助。如果您需要更多详细信息,请随时告诉我。