1

我试过这个:

SPFolder folder = ...;
folder.Item["Name"] = newName;
folder.Item.Update();

它的行为很神秘。如果我运行它,它会引发异常:

 SPException: Cannot complete this action.

但是,如果我在新名称分配之后和 Update() 之前在调试器中停止它,并查看 folder.Item 的属性,然后继续,它每次都有效。这不是时间问题,我尝试在调试器中停止它而不在 Locals 窗口中查看它,但它当时抛出了异常。

这个问题表示类似的解决方案,但使用 SystemUpdate(),这有关系吗? 以编程方式更改 SPFolder 的名称

4

6 回答 6

8

在项目(文件夹)Document Library的字段Name中具有StaticName = FileLeafRef. 所以真正对我有用的是

folder.Item[SPBuiltInFieldId.FileLeafRef] = "The new name";
folder.Item.Update();
于 2013-04-22T06:19:54.297 回答
1

您不需要更改名称,但需要更改标题。所以:

folder.Item[SPBuiltInFieldId.Title] = newName;
folder.Item.Update(); // or SystemUpdate(false)

Update 和 SystemUpdate 的区别在于,Update 将根据信息更改修改/修改,如果启用版本控制,它将增加版本号。SystemUpdate 不会更新这些。

另请注意,我使用 SPBuiltInFieldId.Title。这比使用“标题”要好,因为“标题”可能会导致非英文网站出现问题。

于 2010-09-10T19:47:43.677 回答
1

尝试在操作“ folder.ParentWeb.AllowUnsafeUpdates = true ”之前添加,然后将 AllowUnsafeUpdates 恢复为之前的值。

于 2013-04-22T12:55:07.383 回答
1
 SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid];
            //rename guid to new item id
            attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID;
            attachfolder.Update();
于 2012-03-22T22:41:54.503 回答
0
folder.Item["Name"] = newName;
folder.ParentWeb.AllowUnsafeUpdates = true;
folder.Item.Update();
folder.ParentWeb.AllowUnsafeUpdates = false;

这个叉子给我

于 2013-11-12T10:49:15.893 回答
0

您可以尝试使用该MoveTo方法

于 2012-02-14T14:34:11.477 回答