2010-07-30 20 views
3

Je développe un composant WebPart dans SharePoint 2007 et parfois, quand je tente de supprimer un fichier de bibliothèque de documents avec le code comme ceci:Code d'erreur: 3604 lors de la suppression du fichier de SharePoint Document Library


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

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

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

file.Delete(); 

Je me suivant Exception:

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

L'objet SPFile n'est pas null.

Des idées pourquoi cela se passe-t-il?

Répondre

0

La seule chose que je peux penser est que le fichier est actuellement extrait ou verrouillé pour l'édition par un autre utilisateur. Essayez ceci ...

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

Merci pour votre suggestion. J'ai essayé le code ci-dessus et CheckOutStatus est None quand je reçois une exception. Cela fonctionne bien pour supprimer le fichier dans l'interface Web de SharePoint, mais pas avec l'API. – igorti

0

Etes-vous en train de supprimer un fichier d'une bibliothèque de documents?

Si tel est le cas, vous devez supprimer l'élément entier, car l'élément de la bibliothèque de documents ne peut pas exister sans fichier. Vous avez donc besoin de changer votre code de cette façon:

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

Hope it helps!