SharePoint SPFile可以更改现有项目的扩展名吗?

时间:2011-02-04 07:51:03

标签: sharepoint-2010 file-extension sharepointdocumentlibrary

我在这个问题上的斗智尽头。我有一个用户界面,用于创建和编辑存储在SharePoint文档库中的文档。技巧部分是我需要允许用户更新文档没有问题只需使用SPFile.SaveBinary()吧?

这肯定会更新文件的内容,但不知何故旧的文件名和旧的扩展名仍然存在,这是一个问题。删除和重新添加列表项不是解决方案,因为在URL中引用了项的id。

我的问题是如何更新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();

2 个答案:

答案 0 :(得分:4)

将文件保存到库后,使用MoveTo方法并在newUrl参数中传递修改后的文件名。

SPFile.MoveTo Method (String)
Quick & Easy: Rename Uploaded File Using SharePoint Object Model Via an Event Receiver

答案 1 :(得分:3)

另一种比使用MoveTo更简单的方法是使用SPListItem的 BaseName 属性。你可以通过运行

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

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

由于某种原因,该属性未列在MSDN documentation上,但似乎没有问题。