我正在尝试制作一个应用程序,列出保存在我的谷歌驱动器上或与我的谷歌帐户共享的所有电子表格文件。
我使用的是 C# API V3,我的方法部分有效。问题是它没有显示所有文件,它只显示一些(准确地说是其中的 42 个(。但是,当我通过网络浏览器查看我的驱动器时,我可以看到数百个由我创建或与我共享的电子表格(。
以下是我初始化服务的方法:
string[] scopes = { DriveService.Scope.DriveAppdata, SheetsService.Scope.Spreadsheets };
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync
(
new ClientSecrets
{
ClientId = "12345",
ClientSecret = "54321"
},
scopes,
"USER_NAME",
CancellationToken.None
).Result;
var baseClientServiceInitializer = new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = LIB_NAME + " v" + LIB_VERSION,
};
this.driveService = new DriveService(baseClientServiceInitializer);
以下是列表请求:
List<File> allFilesOnDrive = new List<File>();
var listRequest = this.driveService.Files.List();
listRequest.PageSize = 25;
listRequest.Fields = "nextPageToken, files(name, id)";
do
{
FileList fileBulk = listRequest.Execute();
allFilesOnDrive.AddRange(fileBulk.Files);
listRequest.PageToken = fileBulk.NextPageToken;
} while (listRequest.PageToken != null);
运行后,allFilesOnDrive 列表中只有 42 个文件。我看不出这42个文件有什么特别之处,据我所知,它们与其他文件相同。我错过了什么?
我不确定您的代码出了什么问题,您确定您的驱动器帐户中有超过 42 个文件吗? 请注意,您应该尝试使用页面流处理器
var pageStreamer = new Google.Apis.Requests.PageStreamer<Google.Apis.Drive.v3.Data.File, FilesResource.ListRequest, Google.Apis.Drive.v3.Data.FileList, string>(
(req, token) => request.PageToken = token,
response => response.NextPageToken,
response => response.Files);
var allFiles = new Google.Apis.Drive.v3.Data.FileList();
allFiles.Files = new List<Google.Apis.Drive.v3.Data.File>();
foreach (var result in pageStreamer.Fetch(request))
{
allFiles.Files.Add(result);
}
从我的"列出 Google 云端硬盘上的所有文件"教程中翻录的代码
搜索是通过将 Q 参数添加到请求中来完成的。
mimeType='application/vnd.google-apps.spreadsheet'