Как эффективно удалить все файлы в библиотеке документов? - PullRequest
8 голосов
/ 31 октября 2008

Я ищу четкий, полный пример программного удаления всех документов из определенной библиотеки документов через объектную модель Sharepoint. Доклиб не содержит папок. Я хочу полностью удалить документы (т.е. я не хочу, чтобы они были в корзине).

Я знаю о SPWeb.ProcessBatchData, но мне почему-то кажется, что он не работает.

Спасибо!

Ответы [ 4 ]

8 голосов
/ 01 ноября 2008

Я бы продолжил подход ProcessBatchData, может быть, это поможет:

Винсент Ротвелл покрыл это Лучший: http://blog.thekid.me.uk/archive/2007/02/24/deleting-a-considerable-number-of-items-from-a-list-in-sharepoint.aspx

В противном случае я не уверен, что другая рекомендация сработает, поскольку циклу Foreach не понравится, что количество элементов в коллекции изменяется с каждым удалением.

Вы, вероятно, лучше всего делаете обратный цикл for (я не тестировал этот код, просто пример):

for (int i = SPItems.Length - 1; i >= 0; i--)
{
    SPListItem item = SPItems[i];
    item.File.Delete();
}
3 голосов
/ 18 июня 2009

Это неправильный способ удаления элементов. Следуйте пост здесь http://praveenbattula.blogspot.com/2009/05/deleting-list-items-at-time-from-list.html

1 голос
/ 31 октября 2008

Вам просто нужно просмотреть все файлы вашей библиотеки документов.

foreach(SPListItem item in SPContext.Current.Web.Lists["YourDocLibName"].Items)
{
    //TODO: Verify that the file is not checked-out before deleting
    item.File.Delete();
}

Вызов метода удаления файла из API не использует корзину. Это прямое удаление. Вам все еще нужно убедиться, что файл не извлечен.

Вот некоторые ссылки:

0 голосов
/ 26 августа 2011

Способ Powershell:

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)
}
...