2012-06-25 64 views
8

Có ai biết cách lấy danh sách tệp cho một thư mục SkyDrive cụ thể không? Hiện nay tôi đang sử dụng đoạn mã sau để thử và nhận các tập tin cho thư mục SkyDrive root:Lấy danh sách tệp từ thư mục SkyDrive (Windows Phone)

var client = new LiveConnectClient(e.Session); 

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

client.GetAsync("me/skydrive"); 

nhưng tất cả nó trả về là một cuốn từ điển Kết quả có chứa rất nhiều thông tin nhưng không có danh sách các tên tập tin!

Trả lời

3

Sau khi nhận được tuyệt vọng và đặt ra câu hỏi here

nó quay ra để có được một danh sách các tập tin từ thư mục SkyDrive gốc bạn cần sử dụng chuỗi ma thuật tôi/SkyDrive/file chứ không phải chỉ cho tôi hay cho tôi/skydrive

0

Tệp của bạn có trực tiếp trong "tôi/skydrive" không? Nếu không, bạn cần gọi số điện thoại đó với client.GetAsync("me/skydrive/YOURFOLDER");

Sau đó, bạn nhập dữ liệu đầu ra của mình trong từ điển Kết quả bằng khóa data. và bạn có thể tìm nạp mã bằng cách sử dụng đoạn mã này trong trình xử lýEvent hoàn thành của bạn:

 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     
     } 

Hy vọng điều này sẽ hữu ích.

+0

Không làm việc: Tôi nhận được một KeyNotFoundException cho e.Result [ "dữ liệu"] – Calanus

+0

Vâng, tôi đang hỏi nó liệt kê các file trong thư mục gốc SkyDrive thư mục tức là tôi/skydrive – Calanus

+0

bạn có thể lặp qua từ điển của mình và xem các khóa có trong đó không. – MBen

10

Theo OneDrive core concepts (trước đây là SkyDrive), bạn có hai tùy chọn để liệt kê tệp, trong thư mục trên cùng hoặc một thư mục cụ thể. Như bạn phát hiện ra, bạn có thể liệt kê các tập tin đầu sử dụng

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

và cho một thư mục cụ thể mà bạn sử dụng folderId + "/files", ví dụ

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

trong trường hợp GetCompleted bạn có thể liệt kê tất cả các file từ chìa khóa dữ liệu

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

Thật sự rất tệ khi MS không ghi rõ API nội dung trực tiếp.

  1. Để có được nội dung thư mục gốc sử dụng URI: https://apis.live.net/v5.0/me/skydrive/files?access_token= "+ accessToken
  2. Đối với bất kỳ nội dung thư mục khác sử dụng URI: https://apis.live.net/v5.0/folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files?access_token=" + accessToken

đâu folder.4ab680998d14f4e7.4AB680998D14F4E7!110 là thư mục đích bạn muốn liệt kê .

mẫu mã 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

Bạn nên định dạng bạn mã. Bây giờ nó không thể đọc được. – kazanaki

Các vấn đề liên quan