错误代码:从 SharePoint 文档库中删除文件时出现 3604

Posted

技术标签:

【中文标题】错误代码:从 SharePoint 文档库中删除文件时出现 3604【英文标题】:Error Code: 3604 when deleting file from SharePoint Document Library 【发布时间】: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 对象不为空。

你知道为什么会这样吗?

【问题讨论】:

【参考方案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();

希望对你有帮助!

【讨论】:

以上是关于错误代码:从 SharePoint 文档库中删除文件时出现 3604的主要内容,如果未能解决你的问题,请参考以下文章

无法删除 SharePoint 库中既未签出也未打开进行编辑的文档?

C# 从 SharePoint 2013 文档库中检索文档列表

如何使用 Power Query 从 SharePoint 库中的(许多)文档中获取数据

以编程方式在SharePoint文档库中添加/创建新文档

从 SP 2010 文档库中获取文档的最新签入版本(文档)

如何在 SharePoint 文档库中显示项目的 url