【问题标题】:Error Code: 3604 when deleting file from SharePoint Document Library错误代码:从 SharePoint 文档库中删除文件时出现 3604
【发布时间】:2011-03-23 04:16:50
【问题描述】:

我正在 SharePoint 2007 中开发 WebPart,有时当我尝试使用以下代码从文档库中删除文件时:


SPWeb web = SPControl.GetContextWeb(WebPart.WebPartContext);

SPList list = web.GetList(web.Site.Url + "/ListName");

SPFile file = list.GetItemByUniqueId(new Guid(fileId)).File;

file.Delete();

我得到以下异常:

Cannot remove file "filename.bmp". Error Code: 3604.

堆栈跟踪: 在 Microsoft.SharePoint.Library.SPRequest.AddOrDeleteUrl(字符串 bstrUrl,字符串 bstrDirName,布尔 bAdd,UInt32 dwDeleteOp,Int32 iUserId,Guid & pgDeleteTransactionId) 在 Microsoft.SharePoint.SPFile.DeleteCore(DeleteOp deleteOp) 在 Microsoft.SharePoint.SPFile.Delete()

SPFile 对象不为空。

你知道为什么会这样吗?

【问题讨论】:

    标签: sharepoint web-parts


    【解决方案1】:

    我能想到的唯一可能的事情是该文件当前已签出或锁定以供其他用户编辑。试试这个...

    SPWeb web = SPControl.GetContextWeb(WebPart.WebPartContext);
    SPList list = web.GetList(web.Site.Url + "/ListName");
    SPFile file = list.GetItemByUniqueId(new Guid(fileId)).File;
    
    if (file.CheckOutStatus != SPFile.SPCheckOutStatus.None)
    {
      file.UndoCheckOut();
      file.CheckOut();
    }
    
    file.Delete();
    

    【讨论】:

    • 感谢您的建议。我已经尝试了上面的代码,当我遇到异常时 CheckOutStatus 是 None 。它可以很好地在 SharePoint Web 界面中删除文件,但不能使用 API。
    【解决方案2】:

    您要从文档库中删除文件吗?

    如果是这样,您需要删除整个项目,因为没有文件就不能存在文档库项目。 所以你需要这样改变你的代码:

    SPWeb web = SPControl.GetContextWeb(WebPart.WebPartContext);
    SPList list = web.GetList(web.Site.Url + "/ListName");
    // delete whole item
    SPListItem itemToDelete = list.GetItemByUniqueId(new Guid(fileId));
    itemToDelete.Delete();
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2019-08-17
      • 2017-07-28
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2023-03-18
      相关资源
      最近更新 更多