How to list of more than 1000 records from Google Drive API V3 in C#

前端 未结 4 1838
长情又很酷
长情又很酷 2020-12-18 03:48

This is the continuation of original question in this link.

Through the below code, I can able to fetch 1000 records but I have in total 6500++ records in my drive.

相关标签:
4条回答
  • 2020-12-18 04:21

    Here is an improved (IMO) version of EDR's great answer that does not repeat the listRequest code:

    List<Google.Apis.Drive.v3.Data.File> allFiles = new List<Google.Apis.Drive.v3.Data.File>();
    
    Google.Apis.Drive.v3.Data.FileList result = null;
    while (true)
    {
        if (result != null && string.IsNullOrWhiteSpace(result.NextPageToken))
            break;
    
        FilesResource.ListRequest listRequest = service.Files.List();
        listRequest.PageSize = 1000;
        listRequest.Fields = "nextPageToken, files(id, name)";
        if (result != null)
            listRequest.PageToken = result.NextPageToken;
    
        result = listRequest.Execute();
        allFiles.AddRange(result.Files);
    }
    
    0 讨论(0)
  • 2020-12-18 04:24

    If you need to download paginating you can achieve it via C# SDK too. The trick is in keeping track of the listRequest.Execute() return value, that contains several variables and between them the NextPageToken. This part is "hidden" in the standard google example.

    FilesResource.ListRequest listRequest = _service.Files.List();
    listRequest.PageSize = 100;
    listRequest.Fields = "nextPageToken, files(id, name)";
    
    // List files.
    var result =  listRequest.Execute();
    IList<Google.Apis.Drive.v3.Data.File> files =result.Files;
    Console.WriteLine("Files:");
    while (files!=null && files.Count > 0)
    {
        foreach (var file in files)
        {
            Console.WriteLine("{0} ({1})", file.Name, file.Id);
        }
        if (!string.IsNullOrWhiteSpace(result.NextPageToken))
        {
            listRequest = _service.Files.List();
            listRequest.PageToken = result.NextPageToken;
            listRequest.PageSize = 100;
            listRequest.Fields = "nextPageToken, files(id, name)";
            result = listRequest.Execute();
            files = result.Files;
        }
    }
    
    0 讨论(0)
  • 2020-12-18 04:36

    Achieved thru Google Script. Thanks to mesgarpour (link).

    var folderId = "Enter the Folder Id here";
    
    // Main function 1: List all folders, & write into the current sheet.
    function listFolders(){
      getFolderTree(folderId, false);
    };
    
    // Main function 2: List all files & folders, & write into the current sheet.
    function listAll(){
      getFolderTree(folderId, true); 
    };
    
    // =================
    // Get Folder Tree
    function getFolderTree(folderId, listAll) {
      try {
        // If you want to search from the top (root) folder
        var parentFolder = DriveApp.getRootFolder();
    
        // If you want a tree of any sub folder
        //var parentFolder = DriveApp.getFolderById(folderId);
    
        // Initialise the sheet
        var file, data, sheet = SpreadsheetApp.getActiveSheet();
        sheet.clear();
        sheet.appendRow(["Full Path", "Name", "Date", "URL", "Last Updated", "Description", "Size"]);
    
        // Get files and folders
        getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);
    
      } catch (e) {
        Logger.log(e.toString());
      }
    };
    
    // Get the list of files and folders and their metadata in recursive mode
    function getChildFolders(parentName, parent, data, sheet, listAll) {
      var childFolders = parent.getFolders();
    
      // List folders inside the folder
      while (childFolders.hasNext()) {
        var childFolder = childFolders.next();
        // Logger.log("Folder Name: " + childFolder.getName());
        data = [ 
          parentName + "/" + childFolder.getName(),
          childFolder.getName(),
          childFolder.getDateCreated(),
          childFolder.getUrl(),
          childFolder.getLastUpdated(),
          childFolder.getDescription(),
          childFolder.getSize()
        ];
        // Write
        sheet.appendRow(data);
    
        // List files inside the folder
        var files = childFolder.getFiles();
        while (listAll & files.hasNext()) {
          var childFile = files.next();
          // Logger.log("File Name: " + childFile.getName());
          data = [ 
            parentName + "/" + childFolder.getName() + "/" + childFile.getName(),
            childFile.getName(),
            childFile.getDateCreated(),
            childFile.getUrl(),
            childFile.getLastUpdated(),
            childFile.getDescription(),
            childFile.getSize()
          ];
          // Write
          sheet.appendRow(data);
        }
    
        // Recursive call of the subfolder
        getChildFolders(parentName + "/" + childFolder.getName(), childFolder, data, sheet, listAll);  
      }
    };
    
    0 讨论(0)
  • 2020-12-18 04:39

    You can make several request and get data from each page. The items are dived on pages by security reason

    0 讨论(0)
提交回复
热议问题