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
orLength
プロパティがありません。
サーバーからバージョンを読み取って、次のようにバイトを破棄できると判断しました(効率的ではありませんが、機能するはずです)。
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
次のエラーが発生します。
指定された引数が有効な値の範囲外でした。 パラメーター名:serverRelativeUrl
の値を取得version.Url
してブラウザに入れると、ファイルが開きます。
ファイルサイズを取得する方法について何か提案はありますか?HTTPストリームを開いてファイルを読みたくないのですが、そうなるとそうなります。
ところで、新しいタグsharepoint-comを作成しようとしましたが、十分な評判がありません。十分なポイントを持っている人がタグに価値があると思うなら、それを作成してください:)