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“.