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 更简单的方法是使用 SPListItem 的BaseName属性。您可以通过运行来设置它

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

这比 MoveTo 更容易,因为您不必担心文件夹层次结构,也不必担心文件扩展名。

由于某种原因,该属性未在MSDN 文档中列出,但它似乎运行良好且没有问题。

于 2011-10-18T11:21:05.243 回答