GoogleDrive C#SDK:文件列表中的项目太多

GoogleDrive C#SDK:文件列表中的项目太多,c#,google-drive-api,C#,Google Drive Api,当我检索我的GoogleDrive帐户的所有文件(和文件夹)时,我应该会得到大约1500个列表元素,但我得到了3000多个。我查看了一下列表,发现有些文件在其中有2-3次。为什么呢 以下是我用来检索文件的代码: public async Task<List<File>> RetrieveAllFilesAsList(DriveService service, string query = null) { List<File> res

当我检索我的GoogleDrive帐户的所有文件(和文件夹)时,我应该会得到大约1500个列表元素,但我得到了3000多个。我查看了一下列表,发现有些文件在其中有2-3次。为什么呢

以下是我用来检索文件的代码:

public async Task<List<File>> RetrieveAllFilesAsList(DriveService service, string query = null)
    {


        List<File> result = new List<File>();
        FilesResource.ListRequest request = service.Files.List();

        if (query != null)
        {
            request.Q = query;
        }

        do
        {
            try
            {
                FileList files = await request.ExecuteAsync();

                result.AddRange(files.Items);
                request.PageToken = files.NextPageToken;
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred (from RetrieveAllFilesAsList): " + e.Message);
                request.PageToken = null;
            }
        }
        while (!String.IsNullOrEmpty(request.PageToken));

        return result;

    }
公共异步任务检索AllFileASList(DriveService服务,字符串查询=null)
{
列表结果=新列表();
fileResource.ListRequest请求=service.Files.List();
if(查询!=null)
{
Q=查询;
}
做
{
尝试
{
FileList files=wait request.ExecuteAsync();
result.AddRange(files.Items);
request.PageToken=files.NextPageToken;
}
捕获(例外e)
{
WriteLine(“发生错误(来自RetrieveAllFilesAsList):”+e.Message);
request.PageToken=null;
}
}
而(!String.IsNullOrEmpty(request.PageToken));
返回结果;
}
更新1:

        public async Task<List<File>> RetrieveAllFilesAsList(DriveService service, string query = null)
    {
        List<File> result = new List<File>();
        FilesResource.ListRequest request = service.Files.List();
        request.MaxResults = 1000;

        if (query != null)
        {
            request.Q = query + " AND trashed=false";
        }
        else
        {
            request.Q = "trashed=false";
        }

        do
        {
            try
            {
                FileList files = await request.ExecuteAsync();

                result.AddRange(files.Items);
                request.PageToken = files.NextPageToken;
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred (from RetrieveAllFilesAsList): " + e.Message);
                request.PageToken = null;
            }
        }
        while (!String.IsNullOrEmpty(request.PageToken));

        int i;
        for (i = 0; i < result.Count; i++ )
        {
            System.IO.File.AppendAllText(@"C:\Users\carl\Desktop\log.txt", result[i].Id + "\t" + result[i].Title + "\t" + result[i].ExplicitlyTrashed.ToString() + "\r\n");
        }

        // prints 3120 Lines
        System.IO.File.AppendAllText(@"C:\Users\carl\Desktop\log.txt", "" + i + Environment.NewLine);

        //Count = 3120
        System.IO.File.AppendAllText(@"C:\Users\carl\Desktop\log.txt", "" + result.Count);

        return result;

    }
公共异步任务检索AllFileASList(DriveService服务,字符串查询=null)
{
列表结果=新列表();
fileResource.ListRequest请求=service.Files.List();
request.MaxResults=1000;
if(查询!=null)
{
request.Q=query+“AND trashed=false”;
}
其他的
{
request.Q=“trashed=false”;
}
做
{
尝试
{
FileList files=wait request.ExecuteAsync();
result.AddRange(files.Items);
request.PageToken=files.NextPageToken;
}
捕获(例外e)
{
WriteLine(“发生错误(来自RetrieveAllFilesAsList):”+e.Message);
request.PageToken=null;
}
}
而(!String.IsNullOrEmpty(request.PageToken));
int i;
对于(i=0;i
Word未能为我提供正确的行计数,因此我在函数上执行了该操作。
但是我可以在文件中找到文件ID 2-3次。

我还不能写评论,所以根据 来自谷歌

“注意:默认情况下,此方法返回所有文件。这包括结果中trashed=true的文件。请使用trashed=false查询参数从结果中筛选这些文件。”


所以,您可以检查RESTAPI的url实际被调用了吗?似乎您需要在List方法上添加一些过滤器。

FileList files=wait request.ExecuteAsync()result.AddRange(files.Items)看起来一点都不对劲。如果这是异步执行的,那么
文件。Items
不一定准备就绪/请求在尝试添加结果范围之前完成。我认为对于TAP模型,这应该没有问题。我必须改变什么才能使其工作(使用TAP)?在我的上一条评论中,不知何故我错过了指定的
wait
,因此可能使我的上一次输入变得有些不相关。如果暴露,我仍然会调用非异步方法版本。您需要在3000和6000上扩展一点。为什么是3000?你确定你已经过滤掉了垃圾文件吗?6000是否包含共享文件?当你说2-3次时,你的意思是文件标题是重复的,或者你确认了ID是重复的(即真正的重复vs.多个具有相同标题的文件)。底线是,你需要找到一个不应该存在的文件,并详细调查该文件。我的查询应该会过滤那些被丢弃的文件。是的,ID是重复的(我没有搜索文件名)。有关其他详细信息,请参阅Update1。我现在在函数中添加了一个“trashed=false”的过滤器。如您所见,我从DOC()中获取了函数。但我认为问题在于nextPageToken。我不知道如何检查它,但它应该是这样工作的,因为代码来自Google本身。@carlilord Google api引用链接的末尾有一个表单,你是否尝试过检查是否也有重复的文件?尝试过,但我只有300个文件(没有重复的)。