2012-06-25 13 views
8

Qualcuno sa come ottenere un elenco di file per una determinata cartella SkyDrive? Attualmente sto usando il seguente frammento per cercare di ottenere i file per la cartella principale SkyDrive:Ottieni l'elenco dei file dalla cartella SkyDrive (Windows Phone)

var client = new LiveConnectClient(e.Session); 

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

client.GetAsync("me/skydrive"); 

ma tutto ritorna è un dizionario dei risultati che contiene un sacco di informazioni, ma nessuna lista di nomi di file!

risposta

3

Dopo aver ottenuto disperata e porsi la domanda here

si scopre il per ottenere un elenco di file dalla cartella principale SkyDrive è necessario utilizzare la stringa magia mi/SkyDrive/file e non solo me o/skydrive

0

I file sono direttamente in "me/skydrive"? In caso contrario, è necessario chiamarlo con client.GetAsync("me/skydrive/YOURFOLDER");

Quindi i dati l'output in un dizionario dei risultati con il tasto data. e si può recuperare utilizzando questo pezzo di codice nel tuo gestore 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     
     } 

Spero che questo aiuti.

+0

non funziona: ho un KeyNotFoundException per e.Result [ "data"] – Calanus

+0

Sì, sto chiedendo di elencare i file nella directory principale della cartella SkyDrive cioè me/skydrive – Calanus

+0

puoi scorrere il dizionario e vedere le chiavi che contiene. – MBen

10

In base a OneDrive core concepts (in precedenza SkyDrive) sono disponibili due opzioni per elencare i file, nella directory superiore o in una cartella specifica. Come hai scoperto, è possibile elencare i file top utilizzando

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

e per una cartella specifica di utilizzare folderId + "/files", ad esempio

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

in caso GetCompleted è possibile elencare tutti i file dalla chiave di dati

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

È davvero un male che MS non documenta bene l'API del contenuto live.

  1. Per ottenere alla radice il contenuto della cartella utilizzano URI: https://apis.live.net/v5.0/me/skydrive/files?access_token= "+ access token
  2. Per qualsiasi altro contenuto della cartella utilizzare URI: https://apis.live.net/v5.0/folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files?access_token=" + access token

Dove folder.4ab680998d14f4e7.4AB680998D14F4E7!110 è la cartella di destinazione che si desidera elencare .

codice Java di esempio:

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

Si dovrebbe formattare il vostro codice. Ora è illeggibile. – kazanaki

Problemi correlati