虚拟方法

声明 [源码]

void
next_files_async (
  GFileEnumerator* enumerator,
  int num_files,
  int io_priority,
  GCancellable* cancellable,
  GAsyncReadyCallback callback,
  gpointer user_data
)

描述 [源码]

异步请求枚举器中的多个文件的信息。当所有操作 I/O 完成后,将会调用 callback 并传递请求的信息。

有关返回文件的顺序信息,请参阅 GFileEnumerator 的文档。

当枚举器达到末尾,或发生错误时,callback 会调用一个空列表。在这种情况下,前一个对 g_file_enumerator_next_files_async() 的调用通常会返回少于 num_files 项。

如果请求被取消,则回调会以 G_IO_ERROR_CANCELLED 调用。

这将导致以下伪代码使用:

g_autoptr(GFile) dir = get_directory ();
g_autoptr(GFileEnumerator) enumerator = NULL;
g_autolist(GFileInfo) files = NULL;
g_autoptr(GError) local_error = NULL;

enumerator = yield g_file_enumerate_children_async (dir,
                                                    G_FILE_ATTRIBUTE_STANDARD_NAME ","
                                                    G_FILE_ATTRIBUTE_STANDARD_TYPE,
                                                    G_FILE_QUERY_INFO_NONE,
                                                    G_PRIORITY_DEFAULT,
                                                    cancellable,
                                                    …,
                                                    &local_error);
if (enumerator == NULL)
  g_error ("Error enumerating: %s", local_error->message);

// Loop until no files are returned, either because the end of the enumerator
// has been reached, or an error was returned.
do
  {
    files = yield g_file_enumerator_next_files_async (enumerator,
                                                      5,  // number of files to request
                                                      G_PRIORITY_DEFAULT,
                                                      cancellable,
                                                      …,
                                                      &local_error);

    // Process the returned files, but don’t assume that exactly 5 were returned.
    for (GList *l = files; l != NULL; l = l->next)
      {
        GFileInfo *info = l->data;
        handle_file_info (info);
      }
  }
while (files != NULL);

if (local_error != NULL &&
    !g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
  g_error ("Error while enumerating: %s", local_error->message);

在异步请求过程中,不允许进行其他同步和异步调用,否则将导致 G_IO_ERROR_PENDING 错误。

具有更高优先级(数字值更小)的未完成 I/O 请求将在具有更低优先级的未完成请求之前执行。默认优先级为 G_PRIORITY_DEFAULT

参数

num_files

类型: int

要请求的文件信息对象的数量。

io_priority

类型: int

请求的 I/O 优先级

cancellable

类型: GCancellable

可选的 GCancellable 对象,NULL 表示忽略。

该参数可以为 NULL
数据由方法调用者拥有。
callback

类型: GAsyncReadyCallback

当请求满足时调用 GAsyncReadyCallback

user_data

类型: gpointer

传递给回调函数的数据。

该参数可以为 NULL
数据由方法调用者拥有。