Comment puis-je localiser par programme mon dossier Dropbox à l'aide de C #? * Registre? * Variable d'environnement? * Etc...
solution mise à jour
Dropbox fournit maintenant un fichier info.json comme indiqué ici: https://www.dropbox.com/fr/help/4584
Si vous ne voulez pas faire face à l'analyse du JSON, vous pouvez simplement utiliser la solution suivante:
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 vous souhaitez analyser le JSON, vous pouvez utiliser le JavasCriperserializer comme suit:
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"];
Solution obsolète:
Vous pouvez lire le fichier Dropbox\host.db. C'est un fichier BASE64 situé dans votre chemin Appdata\itinérance. Utilisez ceci:
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);
J'espère que ça aide!
Mise à jour en juillet 2016: le code ci-dessous ne fonctionne plus en raison de modifications du client Dropbox, voir la réponse acceptée ci-dessus pour une solution à jour
La réponse de Reinaldo est essentiellement correcte mais elle donne une sortie indésirable avant le chemin, car il semble y avoir deux lignes dans le fichier hôte.db et, dans ce cas, vous ne voulez que lire le second. Ce qui suit vous obtiendra juste le chemin.
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);
Version nettoyeuse basée sur les réponses précédentes (utilisez Var, ajout de la vérification, supprimez les avertissements):
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;
}
Cela semble être la solution suggérée de Dropbox : https://www.dropbox.com/help/4584?path=desktop_client_and_web_app
Dropbox a ajouté une nouvelle assistance, il existe un fichier JSON dans %APPDATA%\Dropbox\info.json
Ou %LOCALAPPDATA%\Dropbox\info.json
.
Voir https://www.dropbox.com/help/4584 Pour plus d'informations.
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;
}
}
Ce n'est pas stocké dans le registre (au moins ce n'est pas en texte brut). Je crois que cela est stocké dans l'emplacement suivant.
C:\users\userprofile\appdata\itinérance\Dropbox
Je dirais qu'il réside dans le fichier hôte.db ou unlink.db.
Le fichier config.db est un fichier sqlite. Les deux autres sont inconnus (cryptés). Le config.db contient un champ BLOB uniquement avec la version de schéma.
La méthode hôte.db a cessé de fonctionner dans des versions ultérieures de Dropbox.
https://www.dropbox.com/fr/help/4584 Donne l'approche recommandée.
Voici le code C # J'ai écrit pour analyser le JSON et obtenir le dossier 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;