从SkyDrive文件夹获取文件列表(Windows Phone)

8

有人知道如何获取特定SkyDrive文件夹的文件列表吗?目前我正在使用以下代码片段尝试获取根SkyDrive文件夹中的文件:

var client = new LiveConnectClient(e.Session);

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

client.GetAsync("me/skydrive");

但是它返回的只是一个Result字典,其中包含很多信息,但没有文件名列表!
4个回答

10

根据OneDrive核心概念(以前是SkyDrive),您有两个选项来列出文件,即在顶级目录或特定文件夹中。就像您发现的那样,您可以使用以下方法列出顶级文件:

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

对于特定的文件夹,您可以使用folderId + "/files",例如:

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

GetCompleted 事件中,您可以从数据键中列出所有文件。

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
在变得绝望并提问这里之后,事实证明要从根SkyDrive文件夹获取文件列表,您需要使用魔术字符串me/skydrive/files而不是仅使用me或me/skydrive。

3
很遗憾,微软没有很好地记录实时内容API。
  1. 要获取根文件夹内容,请使用URI:https://apis.live.net/v5.0/me/skydrive/files?access_token=" + accessToken
  2. 对于任何其他文件夹内容,请使用URI:https://apis.live.net/v5.0/folder.4ab680998d14f4e7.4AB680998D14F4E7!110/files?access_token=" + accessToken

folder.4ab680998d14f4e7.4AB680998D14F4E7!110 是您想要列出的目标文件夹。

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
你的文件直接放在“me/skydrive”下面吗?否则你需要用client.GetAsync("me/skydrive/YOURFOLDER");来调用它。
然后,将你的输出数据存储在一个带有键data的Result字典中。 在完成事件处理程序中,你可以使用以下代码来获取它:
       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                
       }

希望这可以帮到你。

无法工作:我得到了一个KeyNotFoundException,其原因是e.Result["data"]。 - Calanus
是的,我正在请求列出根 SkyDrive 文件夹中的文件,即 me/skydrive。 - Calanus
你能遍历字典并查看它包含的键吗? - MBen
是的,它包含以下键: id name first_name last_name link gender locale updated_time - Calanus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接