¿Cómo puedo localizar mediante progtwigción mi carpeta de Dropbox usando C #?

¿Cómo puedo localizar mediante progtwigción mi carpeta de Dropbox usando C #? * Registro? * ¿Variable ambiental? * Etc …

SOLUCIÓN ACTUALIZADA

Dropbox ahora proporciona un archivo info.json como se indica aquí: https://www.dropbox.com/en/help/4584

Si no desea tratar el análisis del JSON, simplemente puede usar la siguiente solución:

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(@"\\", @"\"); 

Si desea analizar el JSON, puede usar el JavaScripSerializer de la siguiente manera:

 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"]; 

SOLUCIÓN DEPRECATED:

Puede leer el archivo dropbox \ host.db. Es un archivo Base64 ubicado en su ruta AppData \ Roaming. Utilizar esta:

 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 eso ayude!

ACTUALIZACIÓN EN JULIO DE 2016: EL CÓDIGO A CONTINUACIÓN NO FUNCIONA DEBIDO A LOS CAMBIOS EN EL CLIENTE DE DROPBOX, VÉASE LA RESPUESTA ACEPTABLE ANTERIOR PARA LA SOLUCIÓN ACTUALIZADA

La respuesta de Reinaldo es esencialmente correcta, pero da alguna salida de basura antes de la ruta porque parece que hay dos líneas en el archivo host.db y en este caso solo quiere leer la segunda. Lo siguiente te dará exactamente el camino.

 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); 

Versión más limpia basada en respuestas anteriores (use var, check existente añadido, eliminar advertencias):

  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 la solución sugerida de Dropbox: https://www.dropbox.com/help/4584?path=desktop_client_and_web_app

Dropbox ha agregado un nuevo helper, hay un archivo JSON en %APPDATA%\Dropbox\info.json o %LOCALAPPDATA%\Dropbox\info.json .

Consulte https://www.dropbox.com/help/4584 para obtener más información.

 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; } } 

No está almacenado en el registro (al menos no está en texto plano). Creo que está almacenado en la siguiente ubicación.

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

Yo diría que reside en el archivo host.db o unlink.db.

El config.db es un archivo sqlite. Los otros dos son desconocidos (encriptados). El archivo config.db contiene un campo blob solo con la versión del esquema.

El método host.db ha dejado de funcionar en las versiones posteriores de Dropbox.

https://www.dropbox.com/en/help/4584 proporciona el enfoque recomendado.

Aquí está el código c # que escribí para analizar el json y obtener la carpeta de 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;