首页 > 解决方案 > API 未列出新创建的文件夹

问题描述

我正在使用 Google Drive API V3。我试图从预先存在的文件夹中列出文件和文件夹。早些时候,此文件夹仅包含文件。该清单返回了所有文件。然后当我创建了 2 个新文件夹时。我找不到这两个文件夹。

下面显示的是我的 C# 方法:

        public void FindFiles(FindFilesParam p)
        {
            // Define parameters of request.
            FilesResource.ListRequest listRequest = _service.Files.List();
            listRequest.PageSize = p.PageSize;
            //listRequest.Fields = "nextPageToken, files(id, name)";
            //listRequest.Fields = "nextPageToken, files(*)";
            //listRequest.Fields = "nextPageToken, files(id, name, md5Checksum, createdTime, modifiedTime, size)";
            listRequest.Fields = "nextPageToken, files(*)";
            if ( !string.IsNullOrEmpty(p.FolderId))
                listRequest.Q = $@"('{p.FolderId}' in parents)";
            Google.Apis.Drive.v3.Data.FileList fileList = listRequest.Execute();
            while (!string.IsNullOrWhiteSpace(fileList.NextPageToken))
            {
                listRequest.PageToken = fileList.NextPageToken;
                fileList = listRequest.Execute();
                if (FindFilesReturnedPage != null)
                {
                    var e = new FindFilesReturnedPageEventArgs(
                        fileList.Files, p.RelativePath);
                    FindFilesReturnedPage(this, e);
                    if (e.Cancel)
                        break;
                }
            }

            if (FindFilesFinished != null)
                FindFilesFinished(this, EventArgs.Empty);
        }

    public class FindFilesParam
    {
        public FindFilesParam()
        {
            PageSize = 10;
        }

        public string FolderId { set; get; }
        public string RelativePath { set; get; }
        public int? PageSize { set; get; }
    }


// Calling this as follows:

FindFiles(new FindFilesParam()
{
    FolderId = "1hYcRWXaQcg1Noh06rPCouIgIl5TZ8BWP",
    RelativePath = string.Empty
});

标签: c#google-drive-apigoogle-api-dotnet-client

解决方案


您没有使用文件列表的第一页,它开头的代码while覆盖了在 while 之外创建的第一个文件列表页面。

请改用这段代码来确保您将同时使用第一个和最后一个文件列表页面:

 Google.Apis.Drive.v3.Data.FileList fileList = listRequest.Execute();
 while (true) {
     .......
     //Print or use files list
     ........

     //Break loop if there's no NextPageToken
     if(!string.IsNullOrWhiteSpace(fileList.NextPageToken)) break;

     listRequest.PageToken = fileList.NextPageToken;
     fileList = listRequest.Execute();
}

推荐阅读