方法

GioFileEnumeratornext_files_async

声明 [src]

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

描述 [src]

异步请求枚举器的多个文件信息。当所有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

此方法异步完成。在 GAsyncReadyCallback 内使用 g_file_enumerator_next_files_finish() 以获取操作的最终结果。

参数

num_files

类型: int

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

io_priority

类型: int

请求的 I/O 优先级

cancellable

类型: GCancellable

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

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

类型: GAsyncReadyCallback

在请求满意时调用的 GAsyncReadyCallback

该参数可以为 NULL
user_data

类型: gpointer

传递给回调函数的数据。

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