Need to see if your shared folder is taking up space on your dropbox 👨‍💻? Find out how to check here.

Forum Discussion

sbrownnw's avatar
sbrownnw
Explorer | Level 4
3 years ago
Solved

why is FolderId / SharedParentFolderId null or just missing for FileMetadata retrievals?

 

      static void Main(string[] args)
      {
         DropboxClientConfig config = new DropboxClientConfig
         {
            MaxRetriesOnError = 0
         };
         DropboxClient dropboxClient = new DropboxClient(AccessToken.ValidToken, config);
         var result = dropboxClient.Files.ListFolderAsync("").Result;
         var folderMetadata = result.Entries.Where(e => e.IsFolder).First() as FolderMetadata;
         result = dropboxClient.Files.ListFolderAsync(folderMetadata?.PathLower).Result;
         var fileMetadata = result.Entries.Where(e => e.IsFile).First() as FileMetadata;
         Debug.WriteLine($"fileMetadata is null: {fileMetadata == null} - folderId from ListFolderAsync: {fileMetadata?.ParentSharedFolderId}");
         fileMetadata = dropboxClient.Files.GetMetadataAsync(fileMetadata?.Id).Result as FileMetadata;
         Debug.WriteLine($"fileMetadata is null: {fileMetadata == null} - folderId from GetMetadataAsync: {fileMetadata?.ParentSharedFolderId}");
      }

 

Running above code returns the following:

 

 

 

  • DB-Des's avatar
    DB-Des
    3 years ago

    A feature request has been filed to include the parent folder ID in the metadata response object.

     

    I cannot promise when and if this will be implemented.

7 Replies

Replies have been turned off for this discussion
  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    3 years ago

    The parent shared folder ID is only returned if the item is contained inside a shared folder. (Note that new folders in your home folder are not shared by default.) If the item is not in a shared folder, then ParentSharedFolderId will not be set. The output you shared indicates that the file you're checking is not in a shared folder.

     

    By the way, note that Metadata.ParentSharedFolderId is deprecated in favor of FileSharingInfo.SharingInfo.ParentSharedFolderId and FolderSharingInfo.SharingInfo.ParentSharedFolderId, so you should use fileMetadata?.SharingInfo?.ParentSharedFolderId instead. Note that SharingInfo will likewise not be set if the file is not in a shared folder.

  • sbrownnw's avatar
    sbrownnw
    Explorer | Level 4
    3 years ago

    Feature request please for a File / Folder metadata item to always return its parent FolderId (whether it is shared or not).  Both path and parent FolderId are very important metadata items for these types.

  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    3 years ago

    To clarify, FolderMetadata.Id and Metadata.ParentSharedFolderId are different types of identifiers.

     

    Shared folder IDs (such as in ParentSharedFolderId) are only created once a folder is shared. They can't always be returned since they may not exist yet.

     

    File and folder IDs (such as in FileMetadata.Id and FolderMetadata.Id) however, exist for all non-deleted files and folders. You can get always them from the FileMetadata or FolderMetadata. For example, that would be folderMetadata.Id or fileMetadata.Id in your sample code. If you have only the FileMetadata, you can get the FolderMetadata for its parent by using GetMetadataAsync and passing in the path of the parent (that is, the path of the file without its last path component).

  • sbrownnw's avatar
    sbrownnw
    Explorer | Level 4
    3 years ago

    I don't think you are understanding what we need.  Given a File or Folder Metadata, I need its parent FolderId, all the time.  Given the current API, it does not return that.

  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    3 years ago

    In your original sample code here, you already have access to the parent folder's ID (not the same as the shared folder ID), in folderMetadata.Id.

     

    In cases where you don't already have that parent folder metadata object though, you can retrieve the parent folder ID, given the metadata of a file (or folder), like this:

    var parentFolderPath = Directory.GetParent(fileMetadata.PathLower).ToString();
    var parentFolderId = dropboxClient.Files.GetMetadataAsync(parentFolderPath).Result.AsFolder.Id;

    (Note that this is just a basic example, and assumes that the parent of fileMetadata is not root itself.)

  • sbrownnw's avatar
    sbrownnw
    Explorer | Level 4
    3 years ago

    yes, I know how to get it.  if we are recursing down a deep folder hierarchy it with ListFolderAsync and building it up in memory, it would sure be nice for all the subfolders and subfolders of subfolders all to have the parent FolderId without having to make additional calls.

  • DB-Des's avatar
    DB-Des
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    3 years ago

    A feature request has been filed to include the parent folder ID in the metadata response object.

     

    I cannot promise when and if this will be implemented.

About Dropbox API Support & Feedback

Node avatar for Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.

The Dropbox Community team is active from Monday to Friday. We try to respond to you as soon as we can, usually within 2 hours.

If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X, Facebook or Instagram.

For more info on available support options for your Dropbox plan, see this article.

If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!