GoogleDrive C#SDK:文件列表中的项目太多
当我检索我的GoogleDrive帐户的所有文件(和文件夹)时,我应该会得到大约1500个列表元素,但我得到了3000多个。我查看了一下列表,发现有些文件在其中有2-3次。为什么呢 以下是我用来检索文件的代码: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
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个文件(没有重复的)。