2010-08-31 81 views
1

我正在嘗試使用SharePoint 2010的新SharePoint客戶端對象模型(COM)獲取一些基本文件版本信息。我已成功加載並查詢了我的ListItem,File和FileVersionCollection這樣的:SharePoint客戶端對象模型(COM)文件版本信息

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訪問集合,並得到VersionLabelUrl。但是,我需要獲取版本的字節數,並且FileVersion對象缺少SizeLength屬性。

我決定,我可以只讀取的版本關閉服務器並丟掉字節(效率不高,我知道,但它應該工作),像這樣:

foreach (FileVersion version in item.File.Versions) { 
    FileInformation info = File.OpenBinaryDirect(context, version.Url); 

    long filesize = 0; 

    Stream stream = info.Stream; 
    byte[] buffer = new byte[4096]; 
    int read = 0; 
    while ((read = stream.Read(buffer, 0, 4096)) > 0) { 
     filesize += read; 
    } 

    //use the filesize 
} 

但每次我執行File.OpenBinaryDirect時間我得到這個錯誤:如果我走的version.Url價值,並把它放到我的瀏覽器

 
Specified argument was out of the range of valid values. 
Parameter name: serverRelativeUrl 

,打開該文件。

有關如何獲取文件大小的任何建議?我不想打開HTTP流並讀取文件,但如果涉及到這一點,那麼我會。

順便說一句,我試着創建一個新的標籤sharepoint-com,但我沒有足夠的聲譽。如果有足夠積分的人認爲標籤是值得的,請創建它:)

回答

1

SPFile.Length獲取文件大小(以字節爲單位),不包括文件中使用的任何Web部件的大小。

+1

不適用於客戶端對象模型... – 2012-02-25 05:08:08

0

顯然,您無法通過File.OpenBinaryDirect訪問以前版本的內容。您可以使用WebClient直接通過HTTP/S直接下載。

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

請參閱this forum thread關於它。

相關問題