0

問題: 必要なフォルダーの GetMetaData がルート フォルダーのメタデータを返します。

背景: Dropbox Web インターフェイスからダウンロードするには大きすぎる (数千のファイルと数 GB) フォルダーをダウンロードするための小さなアプリを作成しようとしています。指定されたディレクトリのサブディレクトリを再帰的に試行し、すべてのファイルをダウンロードします。

実際に起こるのは無限ループです。アプリは (誤って) ルート フォルダーのメタデータを取得し、必要なディレクトリに到達するまでディレクトリを反復処理し、受信したメタデータ セットであるルート ディレクトリの処理を開始します。

ディレクトリ名「/Apps」は正常に機能しますが、必要なものは機能しません。フォルダー名には、「/XYX_DataFolder」のように、アンダースコアと大文字と小文字が混在しています (その他の文字は含まれません)。

私のアプリには「完全な Dropbox」権限があり、API キーを取得したアカウントで承認しました。

ディレクトリ名を変更することは、私にとってオプションではありません。

私は VS2012 を使用しており、DropNet は NuGet を介して追加されました。

この問題に関するご意見は大歓迎です。ありがとう!

編集:

ランタイム バージョン v4.0.30319 バージョン 1.10.23.0

参照用に Visual Studio のプロパティ ページで報告されているとおりです。

どちらが正常に機能するかを承認してから、以下のコードを使用します。一部のディレクトリは正常に機能しますが、上記のフォルダーで GetMetaData を実行しようとすると、ルート フォルダーからメタデータが取得されます。

private void DownloadDirectory( string serverDirectory, string clientDirectory ) {
  var meta = m_client.GetMetaData( serverDirectory, false, false );
  foreach ( var item in meta.Contents ) {
    var destinationPath = Path.Combine( clientDirectory, item.Name );
    if ( item.Is_Dir && item.Path == m_serverRootDirectory ) {
      DownloadDirectory( item.Path, destinationPath );
    }
    else {
      //var fileBytes = m_client.GetFile( item.Path );
      //File.WriteAllBytes( destinationPath, fileBytes );
      //textBox1.Text += Environment.NewLine + destinationPath;
    }
  }
}
4

1 に答える 1

1

わかりましたので、ソースをダウンロードしてすぐに問題を見つけました。GetMetaData 呼び出しでハッシュの null が欠落していたため、間違ったオーバーロードが使用されていました。お時間を無駄にして申し訳ありません...返信ありがとうございます!

于 2015-08-10T17:54:26.530 に答える