2012-06-25 5 views
8

특정 SkyDrive 폴더의 파일 목록을 얻는 방법을 아는 사람이 있습니까?SkyDrive 폴더 (Windows Phone)에서 파일 목록 가져 오기

var client = new LiveConnectClient(e.Session); 

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

client.GetAsync("me/skydrive"); 

을하지만 반환 모든 정보를 많이하지만, 파일 이름없이 목록이 포함 된 결과 사전입니다 : 현재 나는 시도하고 루트 스카이 드라이브 폴더의 파일을 가져 오려면 다음 코드를 사용하고 있습니다!

답변

3

질문 here

는 당신이 마법 문자열을 사용하는 데 필요한 루트 스카이 드라이브 폴더에서 파일의 목록을 끈다을 필사적 받고 요청 후 나/스카이 드라이브/파일보다는 나 또는 내/skydrive

0

바로 파일이 "me/skydrive"에 있습니까? 그렇지 않으면 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 – Calanus

+0

사전을 반복하면서 키가 포함 된 키를 볼 수 있습니까? – MBen

10

OneDrive core concepts (이전의 SkyDrive)에 따르면 파일을 최상위 디렉토리 또는 특정 폴더에 나열하는 두 가지 옵션이 있습니다. 당신이 발견, 당신은 당신이 데이터 키에서 모든 파일을 나열 할 수 있습니다 GetCompleted 경우에 예를

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

를 들어,

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

하고 folderId + "/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

MS가 라이브 콘텐츠 API를 잘 문서화하지 못하는 것은 정말 나쁩니다. folder.4ab680998d14f4e7.4AB680998D14F4E7!110 당신이 나열 할 대상 폴더입니다 + accessToken

: 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 사용 :"
    1. 은 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

    관련 문제