Я пытаюсь получить некоторую базовую информацию о версии файла, используя новую клиентскую объектную модель SharePoint (COM) с SharePoint 2010. Я успешно загрузил и запросил мои списки 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
.
Я решил, что могу просто прочитать версию с сервера и выброситьубрать байты (я не знаю, что это эффективно, но это должно работать) примерно так:
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
, я получаю эту ошибку:
Specified argument was out of the range of valid values.
Parameter name: serverRelativeUrl
Если я возьму значение version.Url
и введу его в браузер, файл откроется.
Есть предложения о том, как определить размер файла?Я бы предпочел не открывать поток HTTP и читать файл, но если до этого дойдет, тогда я это сделаю.
Кстати, я пытался создать новый тег sharepoint-com, но у меня не хватает репутации,Если кто-то с достаточным количеством очков считает, что тег стоит, то создайте его:)