8

我正在寻找一个清晰、完整的示例,通过 Sharepoint 对象模型以编程方式从特定文档库中删除所有文档。doclib 不包含文件夹。我希望完全删除这些文档(即我不希望它们在回收站中)。

我知道 SPWeb.ProcessBatchData,但不知何故,它似​​乎对我不起作用。

谢谢!

4

4 回答 4

8

我会坚持使用 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();
}
于 2008-11-01T18:14:05.227 回答
3

这不是删除项目的正确方法。在此处关注帖子 http://praveenbattula.blogspot.com/2009/05/deleting-list-items-at-time-from-list.html

于 2009-06-18T11:23:48.683 回答
1

您只需浏览文档库中的所有文件。

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 对文件调用 delete 方法不会使用回收站。这是直接删除。您仍然需要验证该文件是否未被签出。

这里有一些参考:

于 2008-10-31T20:52:18.233 回答
0

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)
}
于 2011-08-26T16:33:15.697 回答