2010-07-30 95 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(); 

希望它能幫助!