SharePoint客户端对象模型(COM)文件版本信息

SharePoint客户端对象模型(COM)文件版本信息,sharepoint,sharepoint-2010,sharepoint-clientobject,Sharepoint,Sharepoint 2010,Sharepoint Clientobject,我正在尝试使用SharePoint 2010的新SharePoint客户端对象模型(COM)获取一些基本的文件版本信息。我已成功加载并查询我的ListItem、File和FileVersionCollection,如下所示: using (ClientContext context = new ClientContext(site)) { context.Load(context.Web); List docs = context.Web.Lists.GetByTitle("Docs

我正在尝试使用SharePoint 2010的新SharePoint客户端对象模型(COM)获取一些基本的文件版本信息。我已成功加载并查询我的ListItem、File和FileVersionCollection,如下所示:

using (ClientContext context = new ClientContext(site)) {
   context.Load(context.Web);
   List docs = context.Web.Lists.GetByTitle("Docs");
   context.Load(docs);
   //query that returns the ListItems I want
   CamlQuery query = new CamlQuery { ViewXml = ".."};

   ListItemCollection docItems = docs.GetItems(query);
   context.Load(docItems);
   context.ExecuteQuery();

   //load the FileVersionCollection
   foreach (ListItem listItem in docItems) {
      context.Load(listItem);
      context.Load(listItem.File);
      context.Load(listItem.File.Versions);
   }
   context.ExecuteQuery();
此时,我可以遍历
listItem.File.Versions
集合并获取
VersionLabel
Url
。但是,我需要获取版本的字节数,
FileVersion
对象缺少
Size
Length
属性

我决定从服务器上读取版本,然后扔掉字节(我知道效率不高,但它应该可以工作),就像这样:

但每次执行
File.OpenBinaryDirect
时,我都会出现以下错误:

Specified argument was out of the range of valid values. Parameter name: serverRelativeUrl 指定的参数超出了有效值的范围。 参数名称:serverRelativeUrl 如果我获取
version.Url
的值并将其放入浏览器中,文件将打开

关于如何获得文件大小有什么建议吗?我不希望打开HTTP流并读取文件,但如果真是这样,我会这样做


顺便说一句,我试图创建一个新的标签sharepoint com,但我没有足够的声誉。如果有人有足够的分数认为标签是值得的,请创建它:)

SPFile.Length
以字节为单位获取文件大小,不包括文件中使用的任何Web部件的大小。

SPFile.Length
以字节为单位获取文件大小,排除文件中使用的任何Web部件的大小。

显然,您无法通过访问以前版本的内容。您可以使用直接通过HTTP/S下载它

Web web = ...;
FileVersion version = ...;
using (var input = new WebClient() { UseDefaultCredentials = true }) {
    string url = web.Url + "/" + version.Url;
    byte[] content = input.DownloadData(url);
}

请参阅。

显然,您无法通过访问以前版本的内容。您可以使用直接通过HTTP/S下载它

Web web = ...;
FileVersion version = ...;
using (var input = new WebClient() { UseDefaultCredentials = true }) {
    string url = web.Url + "/" + version.Url;
    byte[] content = input.DownloadData(url);
}
看看吧