2012-06-25 8 views
8

Wer weiß, wie eine Liste von Dateien für einen bestimmten SkyDrive-Ordner erhalten? Derzeit bin ich mit dem folgenden Code-Schnipsel, um zu versuchen und die Dateien für die Root-Ordner SkyDrive zu erhalten:Get Liste von Dateien aus SkyDrive-Ordner (Windows Phone)

var client = new LiveConnectClient(e.Session); 

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

client.GetAsync("me/skydrive"); 

aber alle es gibt ein Ergebnis Wörterbuch, das eine Menge Informationen enthält, aber keine Liste von Dateinamen!

Antwort

3

Nach verzweifelt bekommen und der Frage zu stellen here

es stellt mich heraus, das eine Liste von Dateien aus den Stamm skydrive Ordnern erhalten müssen Sie den magischen String nutzen, um mich/skydrive/Dateien nicht nur ich so oder mir/SkyDrive

0

Sind Ihre Dateien direkt unter "me/skydrive"? Andernfalls müssen Sie es mit client.GetAsync("me/skydrive/YOURFOLDER");

aufrufen Dann Daten Sie Ihre Ausgabe in einem Ergebnis-Wörterbuch mit dem Schlüssel data. und Sie können es mit diesem Stück Code holen in Ihrem completedEvent Handler:

 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     
     } 

Hoffnung, das hilft.

+0

Funktioniert nicht: Ich habe eine KeyNotFoundException für e.Result [ „Daten“] – Calanus

+0

erhalten Ja, ich frage es Dateien im Stamm skydrive Ordner dh mich zur Liste/SkyDrive – Calanus

+0

können Sie durch Ihr Wörterbuch laufen, und die Tasten sehen es enthält. ja – MBen

10

nach OneDrive core concepts (vorher SkyDrive) Sie haben zwei Möglichkeiten, Dateien aufzulisten, entweder im obersten Verzeichnis oder einem bestimmten Ordner. Wie Sie herausgefunden, können Sie die Top-Dateien auflisten

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

und für einen bestimmten Ordner verwenden Sie folderId + "/files" verwenden, zum Beispiel

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

im GetCompleted Fall, dass Sie alle Dateien aus dem Datenschlüssel auflisten

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

Es ist wirklich schlimm, dass MS nicht dokumentiert auch die Live-Inhalte API.

  1. Um Stammordner Inhalte verwenden URI zu erhalten: https://apis.live.net/v5.0/me/skydrive/files?access_token= "+ accessToken
  2. Für alle anderen Ordner-Inhalte verwenden URI: https://apis.live.net/v5.0/folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files?access_token=" + accessToken

Wo folder.4ab680998d14f4e7.4AB680998D14F4E7!110 der Zielordner Sie auflisten möchten, ist zu .

Java-Codebeispiel:

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

Sie sollten Sie Code formatiert werden. Jetzt ist es unlesbar. – kazanaki