使用 SP2010。我得到了一个带有两个库的 SPWeb(下面的代码中的sentApplicationsList和sentApplicationsListXml)。在一个过程中,我需要将 XML 文件从第一个库移动到第二个库,所以我写了这个:
for (int i = 0; i < sentApplicationsList.Items.Count; i++)
{
SPFile file = sentApplicationsList.Items[i].File;
if (file != null && file.Name.EndsWith(".xml"))
{
string newUrl = sentApplicationsListXml.RootFolder.Url + "/" + file.Name;
file.MoveTo(newUrl, true);
}
}
当该项目出现在 sentApplicationsListXml 中时,它具有Document内容类型,而不是我的自定义内容类型。为什么 SPFile.MoveTo() 会更改内容类型?我的内容类型在两个库中都被激活。
为了在 MoveTo() 之后更改内容类型,我添加了几行:
string newUrl = sentApplicationsListXml.RootFolder.Url + "/" + file.Name;
SPContentType contentType = file.Item.ContentType;
file.MoveTo(newUrl, true);
SPFile movedFile = web.GetFile(newUrl);
movedFile.Item[SPBuiltInFieldId.ContentType] = contentType;
movedFile.Item[SPBuiltInFieldId.ContentTypeId] = contentType.Id;
movedFile.Item.SystemUpdate();
这没有任何区别。