4

我在这一个智慧的结局。我有一个用户界面,可以创建和编辑存储在SharePoint文档库中的文档。技巧部分是我需要允许用户更新文件没问题就用SPFile.SaveBinary()吧?对现有项目的SharePoint SPFile变更扩展可能吗?

这肯定会更新文件的内容,但不知何故旧文件名和旧扩展名仍然存在,这是一个问题。删除并重新添加列表项不是解决方案,因为该项目的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(); 

回答

3

另一种方式比使用通过MoveTo简单的是使用SPListItem的基础名称财产。您将通过运行

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

这比通过MoveTo容易,因为你不必担心文件夹层次结构,你不必担心文件的扩展名设置此。

由于某种原因,该物业没有在MSDN documentation上列出,但它似乎运作良好,没有问题。

+0

这不适用于我(使用来自SOAP webservice API的批处理方法更新)。 – izaera 2014-08-28 09:42:27