Como faço para localizar programaticamente minha pasta do Dropbox usando c #?

Como faço para localizar programaticamente minha pasta do Dropbox usando c #? * Registro? * Variável de ambiente? * Etc …

SOLUÇÃO ATUALIZADA

O Dropbox agora fornece um arquivo info.json como indicado aqui: https://www.dropbox.com/en/help/4584

Se você não quiser lidar com a análise do JSON, basta usar a seguinte solução:

var infoPath = @"Dropbox\info.json"; var jsonPath = Path.Combine(Environment.GetEnvironmentVariable("LocalAppData"), infoPath); if (!File.Exists(jsonPath)) jsonPath = Path.Combine(Environment.GetEnvironmentVariable("AppData"), infoPath); if (!File.Exists(jsonPath)) throw new Exception("Dropbox could not be found!"); var dropboxPath = File.ReadAllText(jsonPath).Split('\"')[5].Replace(@"\\", @"\"); 

Se você quiser analisar o JSON, poderá usar o JavaScripSerializer da seguinte maneira:

 var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var dictionary = (Dictionary < string, object>) serializer.DeserializeObject(File.ReadAllText(jsonPath)); var dropboxPath = (string) ((Dictionary < string, object> )dictionary["personal"])["path"]; 

SOLUÇÃO DEPRECADA

Você pode ler o arquivo dropbox \ host.db. É um arquivo Base64 localizado em seu caminho AppData \ Roaming. Usa isto:

 var dbPath = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Dropbox\\host.db"); var dbBase64Text = Convert.FromBase64String(System.IO.File.ReadAllText(dbPath)); var folderPath = System.Text.ASCIIEncoding.ASCII.GetString(dbBase64Text); 

Espero que ajude!

ATUALIZAÇÃO EM JULHO DE 2016: O CÓDIGO ABAIXO NÃO FUNCIONA DEVIDO ÀS MUDANÇAS NO CLIENTE DO DROPBOX, VER RESPOSTA ACIMA ACIMA DA SOLUÇÃO UP-TO-DATE

A resposta de Reinaldo é essencialmente correta, mas dá uma saída de lixo eletrônico antes do caminho, porque parece haver duas linhas no arquivo host.db e, nesse caso, você só quer ler a segunda. A seguir, você obterá apenas o caminho.

 string appDataPath = Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData); string dbPath = System.IO.Path.Combine(appDataPath, "Dropbox\\host.db"); string[] lines = System.IO.File.ReadAllLines(dbPath); byte[] dbBase64Text = Convert.FromBase64String(lines[1]); string folderPath = System.Text.ASCIIEncoding.ASCII.GetString(dbBase64Text); Console.WriteLine(folderPath); 

Versão mais limpa baseada em respostas anteriores (use var, added exists check, remove warnings):

  private static string GetDropBoxPath() { var appDataPath = Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData); var dbPath = Path.Combine(appDataPath, "Dropbox\\host.db"); if (!File.Exists(dbPath)) return null; var lines = File.ReadAllLines(dbPath); var dbBase64Text = Convert.FromBase64String(lines[1]); var folderPath = Encoding.UTF8.GetString(dbBase64Text); return folderPath; } 

Esta parece ser a solução sugerida do Dropbox: https://www.dropbox.com/help/4584?path=desktop_client_and_web_app

O Dropbox adicionou um novo auxiliar, existe um arquivo JSON em %APPDATA%\Dropbox\info.json ou %LOCALAPPDATA%\Dropbox\info.json .

Veja https://www.dropbox.com/help/4584 para mais informações.

 public static string getDropBoxPath() { try { var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var dbPath = Path.Combine(appDataPath, "Dropbox\\host.db"); if (!File.Exists(dbPath)) { return null; } else { var lines = File.ReadAllLines(dbPath); var dbBase64Text = Convert.FromBase64String(lines[1]); var folderPath = Encoding.UTF8.GetString(dbBase64Text); return folderPath; } } catch (Exception ex) { throw ex; } } 

Não é armazenado no registro (pelo menos não está em texto sem formatação). Eu acredito que é armazenado no seguinte local.

C: \ Users \ userprofile \ AppData \ Roaming \ Dropbox

Eu diria que reside no arquivo host.db ou unlink.db.

O config.db é um arquivo sqlite. Os outros dois são desconhecidos (criptografados). O config.db contém um campo de blob apenas com a versão do esquema.

O método host.db parou de funcionar em versões posteriores da checkbox de depósito.

https://www.dropbox.com/en/help/4584 fornece a abordagem recomendada.

Aqui está o código c # que eu escrevi para analisar o json e obter a pasta dropbox.

  // https://www.dropbox.com/en/help/4584 says info.json file is in one of two places string filename = Environment.ExpandEnvironmentVariables( @"%LOCALAPPDATA%\Dropbox\info.json" ); if ( !File.Exists( filename ) ) filename = Environment.ExpandEnvironmentVariables( @"%APPDATA%\Dropbox\info.json" ); JavaScriptSerializer serializer = new JavaScriptSerializer(); // When deserializing a string without specifying a type you get a dictionary  Dictionary obj = serializer.DeserializeObject( File.ReadAllText( filename ) ) as Dictionary; obj = obj[ "personal" ] as Dictionary; string path = obj[ "path" ] as string; return path;