文件未从sharepoint库中删除

时间:2015-09-23 12:14:59

标签: c# sharepoint

以下是代码段,我对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所以不能在这篇文章中添加太多内容。

2 个答案:

答案 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();
}