1

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オブジェクトにSizeorLengthプロパティがありません。

サーバーからバージョンを読み取って、次のようにバイトを破棄できると判断しました(効率的ではありませんが、機能するはずです)。

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を作成しようとしましたが、十分な評判がありません。十分なポイントを持っている人がタグに価値があると思うなら、それを作成してください:)

4

2 に答える 2

1

SPFile.Lengthファイルで使用されている Web パーツのサイズを除いた、ファイルのサイズをバイト単位で取得します。

于 2011-03-24T17:44:01.647 に答える
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);
}

それについては、このフォーラムのスレッドを参照してください。

于 2012-09-10T18:42:39.900 に答える