Programmatisch den Dropbox-Ordner ermitteln

In einer CS-Script-Datei wollte ich Dateien in meinem lokalen Dropbox-Ordner speichern.

Also nicht per OAuth über die Dropbox-API zugreifen, sondern einfach eine lokale Kopieraktion im Dateisystem.

Um herauszubekommen, wo dieser Ordner auf meinem lokalen System liegt, habe ich auf Stack Overflow folgenden Code gefunden:

private static string getDropBoxFolderPath()
{
    var appDataPath = Environment.GetFolderPath(
                          Environment.SpecialFolder.ApplicationData);

    var jsonPath = Path.Combine(appDataPath, @"Dropbox\info.json");

    if (File.Exists(jsonPath))
    {
        var json = File.ReadAllText(jsonPath, Encoding.UTF8);
        var j = JObject.Parse(json);

        var value = j.SelectToken(@"$['personal']['path']");
        if (value != null && !string.IsNullOrWhiteSpace(value.Value<string>()))
        {
            var path = value.Value<string>();
            if (Directory.Exists(path)) return path;
        }
    }

    // --

    var dbPath = Path.Combine(appDataPath, "Dropbox\\host.db");

    if (!File.Exists(dbPath)) return null;

    var tmp = dbPath + Guid.NewGuid();
    File.Copy(dbPath, tmp);

    var lines = File.ReadAllLines(tmp);
    var dbBase64Text = Convert.FromBase64String(lines[1]);
    var folderPath = Encoding.ASCII.GetString(dbBase64Text);

    File.Delete(tmp);

    return folderPath.TrimEnd('\\');
}

Es wird also aus einer Dropbox-Konfigurations-Datei der eigentliche Pfad gelesen. Zur Sicherheit, damit ich nicht versehentlich die „host.db“-Datei verändere oder sperre, kopiere ich sie lokal und lösche sie dann wieder.

Siehe dazu auch mein Posting „Programmatisch den OneDrive-Ordner ermitteln“ und mein Artikel „Programmatisch den Google-Drive-Ordner ermitteln“.