2012-03-12 20 views
30

मैं प्रोग्रामिंग से सी # का उपयोग कर अपने ड्रॉपबॉक्स फ़ोल्डर का पता कैसे लगा सकता हूं? * रजिस्ट्री? * पर्यावरण परिवर्तनीय? * आदि ...सी # का उपयोग करके मैं अपने ड्रॉपबॉक्स फ़ोल्डर को प्रोग्रामेटिक रूप से कैसे ढूंढूं?

+0

क्षमा करें - मेरी टिप्पणी बकवास थी, यह नहीं देखा था कि regkeys ड्रॉपबॉक्स डीएल पर इंगित कर रहे थे, ड्रॉपबॉक्स स्थान नहीं। इस मंच पोस्ट को मिला लेकिन ऐसा लगता है कि यह काम नहीं कर सकता है: http://forums.dropbox.com/topic.php?id=47895 मैं व्यक्तिगत रूप से डंकडैंक के समान ही कर रहा हूं लेकिन अनुमान लगाता हूं कि यह उपयोगकर्ताओं के व्यक्तिगत पर काम नहीं करेगा अगर वे डिफ़ॉल्ट स्थान बदलते हैं तो इंस्टॉल करता है। –

+0

क्या आपने यह देखने के लिए इंस्टॉल प्रक्रिया के दौरान [प्रोसेस एक्सप्लोरर] (http://technet.microsoft.com/en-us/sysinternals/bb896653) का उपयोग करने का प्रयास किया है और यह पता लगाने के लिए आप क्या संकेत दे सकते हैं? –

उत्तर

34

UPDATED समाधान

के रूप में यहां कहा गया है

ड्रॉपबॉक्स अब एक 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"]; 

बहिष्कृत किया गया समाधान:

आप ड्रॉपबॉक्स \ host.db फ़ाइल पढ़ सकते हैं। यह आपकी AppData \ रोमिंग पथ में स्थित बेस 64 फ़ाइल है। इसका उपयोग करें:

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); 

आशा है कि इससे मदद मिलती है!

+5

'System.Text.Encoding.UTF8.GetString (dbBase64Text) का उपयोग करें। मेरे पास एक उपयोगकर्ता था जिसमें पथ 'सी: \ उपयोगकर्ता \ जोर्ग \ ड्रॉपबॉक्स' था जो ASCII का उपयोग किया गया था, तो सही ढंग से नहीं पढ़ेगा। – jimbojones

+1

कोई भी इस कोड का उपयोग करता है: यदि आपको पथ से पहले जंक डेटा मिला है, तो नीचे [ivanatpr का उत्तर] (http://stackoverflow.com/a/10401659/348336) देखें। – Gildor

+0

इस विधि ने ड्रॉपबॉक्स के बाद के संस्करणों में काम करना बंद कर दिया। मेरा उत्तर नीचे ऐसा करने का वर्तमान तरीका दिखाता है। – Derek

0

यह रजिस्ट्री में संग्रहीत नहीं है (कम से कम यह सादे पाठ में नहीं है)। मेरा मानना ​​है कि यह निम्नलिखित स्थान पर संग्रहीत है।

C: \ Users \ userprofile \ AppData \ रोमिंग \ ड्रॉपबॉक्स

मैं कहूंगा कि यह host.db या unlink.db फ़ाइल में रहता है।

config.db एक sqlite फ़ाइल है। अन्य दो अज्ञात हैं (एन्क्रिप्टेड)। Config.db में स्कीमा संस्करण के साथ केवल एक ब्लॉब फ़ील्ड होता है।

37

अद्यतन जुलाई 2016: कोड नीचे कोई अब कारण परिवर्तन करने के लिए ड्रॉपबॉक्स ग्राहक में काम करता है, को स्वीकार कर लिया उत्तर उपरोक्त के लिए उत्तर प्रदेश-टू-डेट हल देखने

रेनाल्डो के जवाब अनिवार्य रूप से सही है, लेकिन यह कुछ जंक उत्पादन देता है पथ से पहले क्योंकि 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); 
+1

यह विधि अब ड्रॉपबॉक्स के हाल के संस्करणों के साथ काम नहीं कर रही है। कृपया एक अद्यतन समाधान के लिए स्वीकृत उत्तर देखें। – Reinaldo

+0

ठीक है सिर के लिए धन्यवाद, एक अस्वीकरण जोड़ने का उत्तर संपादित किया गया है कि यह पुराना है – ivanatpr

9

यह ड्रॉपबॉक्स से सुझाव दिया समाधान लगता है एक नया सहायक, %APPDATA%\Dropbox\info.json या %LOCALAPPDATA%\Dropbox\info.json में एक JSON फ़ाइल है।

अधिक जानकारी के लिए https://www.dropbox.com/help/4584 देखें।

+1

यह स्वीकार्य उत्तर होना चाहिए :) –

+0

हां। यह स्वीकार्य उत्तर होना चाहिए। 'Host.db' फ़ाइल ड्रॉपबॉक्स के नए संस्करणों द्वारा बनाई गई नहीं है। 'Hosts.db' पढ़ने की पुरानी विधि आपकी मशीन पर काम कर सकती है क्योंकि फ़ाइल को हटाने के लिए कोई ड्रॉपबॉक्स अपडेट परेशान नहीं है। –

3

ड्रॉपबॉक्स जोड़ा गया है:

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; 
    } 
+0

इसे पढ़ने के लिए नमूना कोड डालना चाहिए था और आपको अधिक अपवॉट मिल सकते हैं और उत्तर के रूप में स्वीकार किया जा सकता है। – DermFrench

0
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; 
     } 
    } 
0

host.db विधि ड्रॉपबॉक्स के बाद के संस्करणों में काम करना बंद कर दिया है।

https://www.dropbox.com/en/help/4584 अनुशंसित दृष्टिकोण देता है।

यहां सी # कोड है जिसे मैंने जेसन को पार्स करने और ड्रॉपबॉक्स फ़ोल्डर प्राप्त करने के लिए लिखा है।

 // 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; 
संबंधित मुद्दे

 संबंधित मुद्दे