J'essaie d'obtenir des informations de base sur la version de fichier à l'aide du nouveau modèle d'objet client SharePoint (COM) avec SharePoint 2010. J'ai chargé et interrogé avec succès mes éléments ListItem, File et FileVersionCollection comme ceci:Informations sur la version du fichier COM (SharePoint Client Object Model)
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();
À ce stade, je peux parcourir la collection listItem.File.Versions
et obtenir le VersionLabel
et Url
. Cependant, j'ai besoin d'obtenir le nombre d'octets de la version et l'objet FileVersion
manque d'une propriété Size
ou Length
.
j'ai décidé que je pouvais lire la version le serveur et jeter les octets (pas efficace, je sais, mais il devrait travail) comme ceci:
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
}
Mais chaque fois que j'exécute File.OpenBinaryDirect
Je reçois cette erreur:
Specified argument was out of the range of valid values. Parameter name: serverRelativeUrl
Si je prends la valeur de version.Url
et de le mettre dans mon navigateur, le fichier s'ouvre.
Des suggestions sur la façon d'obtenir la taille du fichier? Je préférerais ne pas ouvrir un flux HTTP et lire le fichier, mais s'il le faut, alors je le ferai. Par ailleurs, j'ai essayé de créer un nouveau tag sharepoint-com mais je n'ai pas assez de réputation. Si une personne disposant de suffisamment de points pense que cette balise vaut la peine, créez-la :)
Pas pour le modèle d'objet client ... –