c# - publicos - instalar dropbox
¿Cómo puedo localizar mediante programación mi carpeta de Dropbox usando C#? (8)
¿Cómo puedo localizar mediante programación mi carpeta de Dropbox usando C #? * Registro? * ¿Variable ambiental? * Etc ...
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.
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 <string, object>
Dictionary<string, object> obj = serializer.DeserializeObject( File.ReadAllText( filename ) ) as Dictionary<string, object>;
obj = obj[ "personal" ] as Dictionary<string, object>;
string path = obj[ "path" ] as string;
return path;
Esta parece ser la solución sugerida de Dropbox: https://www.dropbox.com/help/4584?path=desktop_client_and_web_app
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.
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;
}
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);
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!
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;
}
}