2010-07-30 94 views
3

我正在开发一个Web部件在SharePoint 2007中,有时当我尝试删除文档库文件有这样的代码:错误代码:3604从SharePoint文档库中删除文件时


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.

Stack Trace: at Microsoft.SharePoint.Library.SPRequest.AddOrDeleteUrl(String bstrUrl, String bstrDirName, Boolean bAdd, UInt32 dwDeleteOp, Int32 iUserId, Guid& pgDeleteTransactionId) at Microsoft.SharePoint.SPFile.DeleteCore(DeleteOp deleteOp) at Microsoft.SharePoint.SPFile.Delete()

SPFile对象不为空。

任何想法为什么发生这种情况?

回答

0

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

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(); 
+0

谢谢你的建议。当我收到异常时,我尝试了上面的代码,而CheckOutStatus是None。它适用于删除SharePoint Web界面中的文件,但不适用于API。 – igorti 2010-09-08 15:03:27

0

您是否正在从文档库中删除文件?

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

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(); 

希望它能帮助!