2012-06-25 15 views
8

Czy ktoś wie, jak uzyskać listę plików dla określonego folderu SkyDrive? Obecnie używam następujący fragment spróbować pobrać pliki do folderu głównego SkyDrive:Pobierz listę plików z folderu SkyDrive (Windows Phone)

var client = new LiveConnectClient(e.Session); 

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

client.GetAsync("me/skydrive"); 

ale wszystko wraca Wynik to słownik, który zawiera wiele informacji, ale nie listę nazw!

Odpowiedz

3

Po zdesperowany i zadać pytanie here

okazuje się, że aby uzyskać listę plików z folderu głównego SkyDrive trzeba użyć magicznego ciąg Me/SkyDrive/pliki, a nie tylko mnie, czy ja/Skydrive

0

Czy Twoje pliki znajdują się bezpośrednio pod "me/skydrive"? W przeciwnym razie musisz zadzwonić pod numer: client.GetAsync("me/skydrive/YOURFOLDER");

Następnie dane zostaną zapisane w słowniku wyników z kluczem data. i można pobrać go za ten kawałek kodu w completedEvent obsługi:

 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     
     } 

nadzieję, że to pomaga.

+0

nie działa: Dostaję KeyNotFoundException dla e.Result [ „dane”] – Calanus

+0

Tak, pytam go do listy plików w katalogu głównego folderu SkyDrive czyli mnie/skydrive – Calanus

+0

możesz iterować przez słownik i zobaczyć zawarte w nim klucze. – MBen

10

Zgodnie z OneDrive core concepts (wcześniej SkyDrive) masz dwie opcje do listy plików, albo w katalogu głównym lub w określonym folderze. Jak się dowiedzieliśmy, można wymienić najlepszymi plików za pomocą

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

i dla określonego folderu używanego folderId + "/files" np

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

w przypadku GetCompleted można wymienić wszystkie pliki z klucza danych

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

To źle, że MS nie dokumentuje dobrze interfejsu API treści na żywo.

  1. Aby uzyskać zawartość folderu głównego używać URI: https://apis.live.net/v5.0/me/skydrive/files?access_token= "+ accessToken
  2. W przypadku jakichkolwiek innych zawartości folderu używać URI: https://apis.live.net/v5.0/folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files?access_token=" + accessToken

Gdzie folder.4ab680998d14f4e7.4AB680998D14F4E7!110 to folder docelowy chcesz wymienić .

przykładowy kod Java:

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

Należy formacie kodu. Teraz jest nieczytelne. – kazanaki