从 GnomeVFS 迁移到 GIO

从 GnomeVFS 迁移到 GIO

GnomeVFS 和 GIO 概念的比较

GnomeVFS GIO
GnomeVFSURI GFile
GnomeVFSFileInfo GFileInfo
GnomeVFSResult GErrorG_IO_ERROR
GnomeVFSHandle & GnomeVFSAsyncHandle GInputStreamGOutputStream
GnomeVFSDirectoryHandle GFileEnumerator
MIME 类型 内容类型
GnomeVFSMonitor GFileMonitor
GnomeVFSVolumeMonitor GVolumeMonitor
GnomeVFSVolume GMount
GnomeVFSDrive GVolume
- GDrive
GnomeVFSContext GCancellable
gnome_vfs_async_cancel() g_cancellable_cancel()

回收站处理

与 gnome-vfs 相比,GIO 中移动到回收站的文件的处理已经发生改变。gnome-vfs 有一个内部回收站实现,该实现早于此 freedesktop.org 桌面回收站 规范,在 GIO 中已实现。存储回收站文件的目录已从 $HOME/.Trash 更改为 $HOME/.local/share/Trash(或更准确地说是 $XDG_DATA_HOME/Trash),这意味着需要将 gnome-vfs 移动到回收站的文件迁移到新目录。

在 gnome-vfs 中,在 Nautilus 中实现了提供所有回收站目录的合并视图的 trash:// 方案,而回收站处理应用程序必须自行查找并监视所有回收站目录。在 GIO 中,trash:// 已移到 gvfs,并且应用程序只需监视该目录

static void
file_changed (GFileMonitor      *file_monitor,
              GFile             *child,
              GFile             *other_file,
              GFileMonitorEvent  event_type,
              gpointer           user_data)
{
  switch (event_type)
  {
  case G_FILE_MONITOR_EVENT_DELETED:
    g_print ("'%s' removed from trash\n", g_file_get_basename (child));
    break;
  case G_FILE_MONITOR_EVENT_CREATED:
    g_print ("'%s' added to trash\n", g_file_get_basename (child));
    break;
  default: ;
  }
}

static void
start_monitoring_trash (void)
{
  GFile *file;
  GFileMonitor *monitor;

  file = g_file_new_for_uri ("trash://");
  monitor = g_file_monitor_directory (file, 0, NULL, NULL);
  g_object_unref (file);

  g_signal_connect (monitor, "changed", G_CALLBACK (file_changed), NULL);

  /* ... */

}

GIO 公开了有关回收站文件的某些有用元数据。有 trash::orig-pathtrash::deletion-date 属性。trash:// 本身的 standard::icon 属性为在桌面上显示回收站提供了适当的图标。如果你正在使用此图标,请务必监视此属性是否有更改,因为该图标可能会更新以反映回收站的状态。

使用 GIO 将文件移动到回收站要简单得多。只需使用 g_file_trash() 方法,而不是将 gnome_vfs_find_directory()GNOME_VFS_DIRECTORY_KIND_TRASH 结合使用来查找移动回收站文件的目录。

对多个文件进行操作

gnome-vfs 有可怕的 gnome_vfs_xfer_uri_list() 函数,它拥有大量选项,并且一次提供了 cpmvlnmkdirrm 的等效功能。

GIO 提供了一种更简单的异步任务功能,它允许你安排在单独的线程中调用一个函数,确保在创建任务的主上下文中安排更新,以便你可以更新你的用户界面。请参阅:GTask

MIME 监视

gnome-vfs 提供了一种通过 GnomeVFSMIMEMonitor 对象监控 mime 类型与默认处理程序之间关联变化的方法。GIO 目前不提供此功能的替代,因为我们尚未找到 GnomeVFSMIMEMonitor 的一个引人注目的用例。如果您认为有此类用例,请 在 GLib 问题追踪器上提交一个问题