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