2010-07-30 3 views
3
나는 셰어 2007 년에는 WebPart를 개발하고있어이 같은 코드를 사용하여 문서 라이브러리에서 파일을 삭제하려고하면 가끔

:오류 코드 : 3604 셰어 포인트 문서 라이브러리에서 파일을 삭제할 때


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 개체가 null이 아닙니다.

그 이유는 무엇입니까?

답변

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 웹 인터페이스에서는 파일을 삭제하는 데는 효과가 있지만 API에서는 삭제되지 않습니다. – igorti

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

는 희망이 도움이!

관련 문제