虚拟方法
声明 [源码]
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
。 user_data
-
类型:
gpointer
传递给回调函数的数据。
该参数可以为 NULL
。数据由方法调用者拥有。