如何以編程方式找到使用C#的Dropbox文件夾? *註冊表? *環境變量? *等...如何以編程方式找到使用C#的Dropbox文件夾?
回答
更新的解決方案
如說這裏的Dropbox現在提供了一個info.json文件:https://www.dropbox.com/en/help/4584
如果你不想處理解析JSON,你可以簡單地採用如下方案:
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(@"\\", @"\");
如果你想解析JSON,您可以使用JavaScripSerializer如下:
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"];
DEPRECATED SOLUTION:
您可以閱讀保管箱\ host.db文件。它是位於AppData \ Roaming路徑中的Base64文件。使用這個:
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);
希望它有幫助!
使用'System.Text.Encoding.UTF8.GetString(dbBase64Text)'。我有一個用戶擁有路徑'C:\ Users \Jörg\ Dropbox',如果使用ASCII,將無法正確讀取。 – jimbojones 2013-12-11 16:25:00
任何人都使用此代碼:如果您在路徑之前得到垃圾數據,請查看下面的[ivanatpr答案](http://stackoverflow.com/a/10401659/348336)。 – Gildor 2015-05-26 04:35:21
此方法在更高版本的Dropbox中停止工作。我的答案顯示了目前的做法。 – Derek 2016-06-19 00:57:53
它沒有存儲在註冊表中(至少它不是純文本)。我相信它存儲在以下位置。
C:\用戶\用戶配置文件\應用程序數據\漫遊\ Dropbox的
我會說,它駐留在host.db或unlink.db文件。
config.db是一個sqlite文件。另外兩個是未知的(加密的)。 config.db僅包含模式版本的blob字段。
更新2016年7月:下面的代碼將不再有效因改變而在Dropbox的客戶端,SEE接受的答案上面UP-TO-DATE SOLUTION
雷納爾多的答案基本上是正確的,但它提供了一些垃圾輸出在路徑之前,因爲host.db文件中似乎有兩行,在這種情況下,您只需要閱讀第二行。以下內容將爲您提供路徑。
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);
基於以前的答案清潔版本(使用VAR,添加存在檢查,刪除警告):
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;
}
這似乎是從Dropbox的建議的解決方案:https://www.dropbox.com/help/4584?path=desktop_client_and_web_app
這應該是被接受的答案:) – 2015-07-15 09:34:51
是的。這應該是被接受的答案。 'host.db'文件不是由更新版本的Dropbox創建的。讀取'hosts.db'的舊方法可能適用於您的機器,因爲沒有Dropbox更新困擾刪除文件。 – 2015-12-18 14:45:01
的Dropbox已添加一個新的幫手,在%APPDATA%\Dropbox\info.json
或%LOCALAPPDATA%\Dropbox\info.json
有一個JSON文件。
有關更多信息,請參閱https://www.dropbox.com/help/4584。
應該已經放入示例代碼來閱讀本文,並且您可能會獲得更多upvotes並被接受爲答案。 – DermFrench 2015-09-28 13:02:45
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;
}
}
host.db方法在更高版本的Dropbox中停止工作。
https://www.dropbox.com/en/help/4584給出了推薦的方法。
這裏是我寫的解析json和獲取dropbox文件夾的c#代碼。
// 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;
- 1. 如何以編程方式使用c#獲得Dropbox共享文件夾的成員?
- 2. 以編程方式在c#中查找windows文件夾#
- 3. 如何以編程方式恢復Dropbox中的文件
- 4. 如何以編程方式查找ASP.NET App_Data文件夾路徑
- 5. 如何使用C/C++以編程方式檢查Windows系統文件夾?
- 6. 如何以編程方式在Dropbox中共享照片,文件夾等? (iOS)
- 7. C#:如何以編程方式獲取Dropbox文件夾和文件的共享鏈接
- 8. 如何以編程方式使用Roslyn編譯C#文件?
- 9. 你如何以編程方式找到Vista的「Saved Games」文件夾?
- 10. 如何以編程方式引用所需的值文件夾?
- 11. 以編程方式共享文件夾
- 12. 如何以編程方式更新VSTS文件(使用c#)
- 13. 如何以編程方式檢入本地文件夾中的文件到TFS?
- 14. 如何以編程方式查找文件的編碼?
- 15. 如何以編程方式查找使用C#的Google雲端硬盤文件夾?
- 16. 如何以編程方式隱藏文件夾中的Android
- 17. 如何以編程方式查找可執行文件引用
- 18. Alfresco以編程方式導航到正確的文件夾
- 19. 如何以編程方式在Linux中查找文件格式?
- 20. 如何以編程方式訪問ipad「Video」文件夾
- 21. 如何在cloudme中以編程方式複製文件夾
- 22. 如何在android中以編程方式打開文件夾?
- 23. 如何以編程方式鎖定Android文件夾?
- 24. 如何在.Net中以編程方式解鎖文件夾?
- 25. 如何在android中以編程方式隱藏文件夾
- 26. 如何在android中以編程方式鎖定文件夾?
- 27. 如何以編程方式在Eclipse中設置源文件夾?
- 28. 如何以編程方式在Sharepoint站點創建文件夾
- 29. 如何以編程方式更改Wordpress上傳文件夾?
- 30. 如何以編程方式查找php.ini文件的位置?
對不起 - 我的評論是無稽之談,沒有注意到,regkeys指向的Dropbox DLL,而不是保管箱的位置。發現這個論壇帖子,但看起來像它可能無法正常工作:http://forums.dropbox.com/topic.php?id=47895我個人做與DankDank相同,但會猜測這不會對用戶個人如果他們更改默認位置,則進行安裝。 – 2012-03-12 00:38:44
您是否在安裝過程中嘗試使用[Process Explorer](http://technet.microsoft.com/zh-cn/sysinternals/bb896653)以查看它的作用以及您可以找到哪些提示來檢測它? – 2012-03-12 00:39:16