2012-06-25 14 views
8

क्या कोई जानता है कि किसी विशेष SkyDrive फ़ोल्डर के लिए फ़ाइलों की सूची कैसे प्राप्त करें? वर्तमान में मैं कोशिश करते हैं और जड़ SkyDrive फ़ोल्डर के लिए फ़ाइलों को प्राप्त करने के लिए निम्नलिखित स्निपेट का उपयोग कर रहा:SkyDrive फ़ोल्डर (विंडोज फोन) से फ़ाइलों की सूची प्राप्त करें

var client = new LiveConnectClient(e.Session); 

client.GetCompleted += (obj, arg) => 
    { 
     ... 
    } 

client.GetAsync("me/skydrive"); 

लेकिन सभी यह रिटर्न एक परिणाम शब्दकोश कि जानकारी का एक बहुत कुछ है, लेकिन फ़ाइल नाम की कोई सूची है!

उत्तर

3

हताश हो रही है और सवाल here

यह पता चला है जड़ SkyDrive फ़ोल्डर से फ़ाइलों की एक सूची प्राप्त करने के लिए आप जादू स्ट्रिंग का उपयोग करने की जरूरत है पूछ के बाद मुझे/SkyDrive/बजाय फाइलों बस मुझे या मेरे/SkyDrive

0

क्या आपकी फ़ाइलें सीधे "मुझे/आकाशगंगा" के अंतर्गत हैं? अन्यथा आपको client.GetAsync("me/skydrive/YOURFOLDER");

के साथ कॉल करने की आवश्यकता है, फिर आप data कुंजी के साथ परिणाम शब्दकोश में अपने आउटपुट को डेटा करते हैं। और आप अपने completedEvent हैंडलर में कोड के इस टुकड़े का उपयोग कर इसे लाने कर सकते हैं:

 var data = (List<object>)e.Result["data"]; 
     foreach (IDictionary<string, object> content in data) 
     {     
      var skyContent = new SkyDriveContent(); 
      skyContent.Name = (string)content["name"]; 
      ContentList.Add(skyContent); // where ContentList is :  List<SkyDriveContent> ContentList = new List<SkyDriveContent>(); in your class     
     } 

आशा इस मदद करता है।

+0

काम नहीं करता: मैं e.Result के लिए एक KeyNotFoundException मिल [ "डाटा"] – Calanus

+0

हाँ, मैं यह जड़ SkyDrive फ़ोल्डर यानी मुझ में फ़ाइलों को सूचीबद्ध करने के लिए पूछ रहा हूँ/skydrive – Calanus

+0

क्या आप अपने शब्दकोश के माध्यम से पुनरावृत्त कर सकते हैं, और इसमें मौजूद कुंजियां देख सकते हैं। – MBen

10

OneDrive core concepts (पहले SkyDrive) करने के लिए आप फ़ाइलों को सूचीबद्ध करने के लिए दो विकल्प हैं अनुसार, या तो शीर्ष निर्देशिका या किसी विशिष्ट फ़ोल्डर में। आप को पता चला के रूप में, आप शीर्ष फ़ाइलों GetCompleted घटना में उपयोग करते हुए

liveClient.GetAsync("me/skydrive/files"); 

और आप folderId + "/files" का उपयोग किसी विशिष्ट फ़ोल्डर के लिए, उदाहरण के

liveClient.GetAsync(folder.Id + "/files"); 

के लिए सूचीबद्ध कर सकते हैं आप डेटा कुंजी से सभी फाइलों को सूचीबद्ध कर सकते हैं

private void onFilesInformationDownloaded(object sender, 
              LiveOperationCompletedEventArgs e) { 
    if (e.Result == null) { 
     // check e.Error for reason why it failed 
     return; 
    } 
    List<object> data = (List<object>)e.Result["data"]; 
    foreach (IDictionary<string, object> content in data) { 
     string type = (string)content["type"]; 
     if (type == "folder") { 
      // do something with folders? 
     } 
     string filename = (string)content["name"]; 
     string fileId = (string)content["id"]; 
     // use fileId to download a file or list files in a folder 

     // there's a few more details available in content.Keys 
     // such as created_time and updated_time for those interested 
    } 
} 
3

यह वास्तव में बुरा है कि एमएस लाइव सामग्री एपीआई अच्छी तरह से दस्तावेज नहीं करता है।

  1. प्राप्त करने के लिए रूट फ़ोल्डर सामग्री का उपयोग यूआरआई: + accessToken

कहाँ folder.4ab680998d14f4e7.4AB680998D14F4E7!110 आप सूचीबद्ध करना चाहते लक्ष्य फ़ोल्डर है: https://apis.live.net/v5.0/me/skydrive/files?access_token= "https://apis.live.net/v5.0/folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files?access_token= + accessToken

  • किसी अन्य फ़ोल्डर सामग्री के लिए URI का उपयोग" ।

    जावा कोड नमूना:

    public void listRootFolder(String accessToken) { 
        String folderId = "folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files"; 
        String url = "https://apis.live.net/v5.0/" + folderId + "?access_token=" + accessToken; 
        HttpMethod method = new GetMethod(url); 
        HttpClient client = new HttpClient(); 
        try { 
         int returnCode = client.executeMethod(method); 
         System.out.println("Return code " + returnCode); 
         System.out.println(method.getResponseBodyAsString()); 
        } catch (HttpException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
    } 
    
  • +0

    आप आप कोड को स्वरूपित करना चाहिए। अब यह अपठनीय है। – kazanaki

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