【问题标题】:Download folder with all content recursively, Sharpbox递归下载所有内容的文件夹,Sharpbox
【发布时间】:2013-10-11 13:29:52
【问题描述】:

所以我设置了一个小应用程序,我想用它来从我的公共 Dropbox 文件夹中下载一个文件夹,并将其中的所有内容下载到一个虚拟机中。

如果我尝试:

var publicFolder = dropBoxStorage.GetFolder("/Public");
string targetFile = @"C:\Users\Michael\";
dropBoxStorage.DownloadFile(publicFolder,@"WS",targetFile);

如果文件夹包含我要下载的所有内容。

但是,当我运行代码时,我得到:

【问题讨论】:

    标签: c# dropbox-api sharpbox


    【解决方案1】:

    SharpBox 不支持下载文件夹。 我花时间写了一个函数,它应该递归地下载文件夹。 (虽然还没有测试过)。

    string remoteDirName = @"/Public/WS";
    string targetDir = @"C:\Users\Michael\";
    var remoteDir = dropBoxStorage.GetFolder(remoteDirName);
    
    public static DownloadFolder(CloudStorage dropBoxStorage,ICloudDirectoryEntry remoteDir, string targetDir)
    {
    
        foreach (ICloudFileSystemEntry fsentry in remoteDir)
        {
            if (fsentry is ICloudDirectoryEntry)
            {
                DownloadFolder(dropBoxStorage, fsentry, Path.Combine(targetDir, fsentry.Name));
            }
            else
            {
                dropBoxStorage.DownloadFile(remoteDir,fsentry.Name,Path.Combine(targetDir, fsentry.Name));
            }
        }
    }
    

    【讨论】:

    • 这也与 SharpBox 的哪个版本有关?
    • if 语句中的 DownloadFolder 行也报错。
    • 正如我所说,它尚未经过测试。它可能仍然需要一些工作,这只是一般的想法。在您指定的情况下,您可能会将顶部传递给函数 DownloadFolder(dropBoxStorage, fsentry as ICloudDirectoryEntry, Path.Combine(targetDir, fsentry.Name));
    • 非常感谢您的帮助
    【解决方案2】:

    下面的代码也可以正常工作..

    var PublicFolder = dropBoxStorage.GetFolder("/Public");
     if (PublicFolder != null && PublicFolder.ToList().Count > 0)
                    {
     DownloadFolder(dropBoxStorage, PublicFolder as ICloudDirectoryEntry, targetPath);
    }
    
    
    
    public static void DownloadFolder(CloudStorage dropBoxStorage, ICloudDirectoryEntry remoteDir, string targetDir)
        {
            foreach (var fof in remoteDir.ToList())
            {
    
                if (fof is ICloudDirectoryEntry)
                {
                    DirectoryInfo newDir = new DirectoryInfo(Path.Combine(targetDir, fof.Name));
                    if (!newDir.Exists)
                    {
                        Directory.CreateDirectory(Path.Combine(targetDir, fof.Name));
                    }
    
                    DownloadFolder(dropBoxStorage, fof as ICloudDirectoryEntry, Path.Combine(targetDir, fof.Name));
                }
                else
                {
                    dropBoxStorage.DownloadFile(remoteDir, fof.Name, Path.Combine(targetDir));
                }
    
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 1970-01-01
      • 2016-12-25
      • 2018-10-28
      • 2013-07-04
      • 1970-01-01
      • 2011-08-17
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多