5

私はこれで頭がいっぱいです。SharePoint ドキュメント ライブラリに保存されているドキュメントを作成および編集するユーザー インターフェイスがあります。トリックの部分は、ユーザーが問題なくドキュメントを更新できるようにする必要があることSPFile.SaveBinary()です。

これにより、ファイルの内容は間違いなく更新されますが、なぜか古いファイル名と古い拡張子が残っています。これは問題です。アイテムのIDがURLで参照されているため、リストアイテムを削除して再度追加することも解決策ではありません。

私の質問は、SPFile アイテムの拡張子とファイル名のメタデータを更新するにはどうすればよいですか?

これまでのところ、オブジェクト ライブラリを使用する試みはすべて失敗しました。以下のフィールドを更新しようとしましたが、成功していません。これを行うには、もっと簡単な方法が必要なようです。

SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();

[編集] - これが私の実用的なソリューションです。

SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();
4

2 に答える 2

5

ファイルがライブラリに保存されたら、MoveToメソッドを使用して、変更したファイル名をnewUrlパラメーターに渡します。

SPFile.MoveTo メソッド (文字列) すばやく
簡単: イベント レシーバー経由で SharePoint オブジェクト モデルを使用して、アップロードされたファイルの名前を変更します。

于 2011-02-04T08:09:55.117 に答える
4

MoveTo を使用するよりも簡単なもう 1 つの方法は、SPListItem のBaseNameプロパティを使用することです。これを実行して設定します

item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be 
item.Update();

これは、フォルダー階層を気にする必要がなく、ファイル拡張子を気にする必要がないため、MoveTo よりも簡単です。

なぜかMSDNのドキュメントには記載されていませんが、問題なく動作しているようです。

于 2011-10-18T11:21:05.243 に答える