Wie effizient alle Dateien in einer Dokumentbibliothek löschen?
-
05-07-2019 - |
Frage
Ich bin für ein klares, vollständiges Beispiel programmatisch alle Dokumente aus einer bestimmten Dokumentbibliothek zu löschen, über das Sharepoint-Objektmodell. Die DocLib enthält keine Ordner. Ich suche die Dokumente vollständig (dh ich will nicht, dass sie in den Papierkorb).
löschenIch kenne SPWeb.ProcessBatchData, aber irgendwie scheint es nie für mich zu arbeiten.
Danke!
Lösung
ich mit dem ProcessBatchData Ansatz beharren würde, vielleicht wird dies helfen:
Vincent Rothwell hat bedeckt diese Beste: http://blog.thekid.me.uk/archive/2007/02/24/deleting-a-considerable-number-of-items-from-a-list-in-sharepoint.aspx
Ansonsten bin ich nicht sicher, ob die andere Empfehlung funktionieren wird, wie eine Foreach-Schleife nicht mag, dass die Anzahl der Elemente in der Auflistung Änderungen mit jeder löschen.
Sie sind wahrscheinlich am besten ein Reverse-for-Schleife zu tun (ich habe diesen Code nicht testen, um nur ein Beispiel):
for (int i = SPItems.Length - 1; i >= 0; i--)
{
SPListItem item = SPItems[i];
item.File.Delete();
}
Andere Tipps
Dies ist nicht der richtige Weg Artikel zu löschen. Folgen hier posten http: //praveenbattula.blogspot. com / 2009/05 / Löschen-list-Artikel-at-Zeit-von-list.html
Sie müssen nur alle Dateien Ihrer Dokumentbibliothek gehen.
foreach(SPListItem item in SPContext.Current.Web.Lists["YourDocLibName"].Items)
{
//TODO: Verify that the file is not checked-out before deleting
item.File.Delete();
}
Der Aufruf der Löschmethode auf eine Datei aus dem API nicht den Papierkorb nicht verwendet. Es ist eine gerade löschen. Sie müssen noch zu überprüfen, ob die Datei nicht überprüft-out.
Hier finden Sie einige Referenz:
Powershell Art und Weise:
function ProcessFolder {
param($folderUrl)
$folder = $web.GetFolder($folderUrl)
foreach ($file in $folder.Files) {
#Ensure destination directory
$destinationfolder = $destination + "/" + $folder.Url
if (!(Test-Path -path $destinationfolder))
{
$dest = New-Item $destinationfolder -type directory
}
#Delete file by deleting parent SPListItem
$list.Items.DeleteItemById($file.Item.Id)
}
}
#Delete root Files
ProcessFolder($list.RootFolder.Url)
#Delete files from Folders or Document Sets
foreach ($folder in $list.Folders) {
ProcessFolder($folder.Url)
}