以下是代码段,我对sharepoint来说几乎是新手
using (SPSite site = new SPSite(spSiteGUID))
{
using (SPWeb web = site.OpenWeb(spWebGUID))
{
SPList list = web.Lists["Folder Name"];
string sQuery = "<Where><BeginsWith><FieldRef Name='NameOrTitle'/><Value Type='Text'>" + fileName + "</Value></BeginsWith></Where>";
var oQuery = new SPQuery();
oQuery.Query = sQuery;
oQuery.ViewAttributes = @"Scope='Recursive'";
SPListItemCollection collListItems = list.GetItems(oQuery);
foreach (SPListItem oListItem in collListItems)
{
//file.UndoCheckOut();
//file.CheckOut();
oListItem.File.UndoCheckOut();
oListItem.File.CheckOut();
oListItem.Delete();
}
}
正在识别要删除的目标文件。一切正常,直到最后一行是oListItem.Delete(); 。 oListItem包含正确的文件名,但由于某种原因,删除不会发生。我没有看到任何错误。我非常喜欢sharepoint所以不能在这篇文章中添加太多内容。
答案 0 :(得分:1)
我不知道你为什么没有收到任何错误!但是你不能遍历SPListItemCollection(collListItems)并继续同时删除它的项目。你看,foreach循环内部调用GetEnumerator,它严格要求集合保持enact,即迭代时不能更改集合。你在这里可以做的是用for循环替换foreach:
for (int i = collListItems.Count-1; i>= 0; i--)
{
collListItems[i].File.UndoCheckOut();
collListItems[i].File.CheckOut();
collListItems[i].Delete();
}
答案 1 :(得分:0)
foreach (SPListItem oListItem in collListItems)
{
//file.UndoCheckOut();
//file.CheckOut();
oListItem.File.UndoCheckOut();
oListItem.File.CheckOut();
SPListItem itemToDelete = list.GetItemById(oListItem.Id);
itemToDelete.Delete();
}