我正在寻找一个清晰、完整的示例,通过 Sharepoint 对象模型以编程方式从特定文档库中删除所有文档。doclib 不包含文件夹。我希望完全删除这些文档(即我不希望它们在回收站中)。
我知道 SPWeb.ProcessBatchData,但不知何故,它似乎对我不起作用。
谢谢!
我正在寻找一个清晰、完整的示例,通过 Sharepoint 对象模型以编程方式从特定文档库中删除所有文档。doclib 不包含文件夹。我希望完全删除这些文档(即我不希望它们在回收站中)。
我知道 SPWeb.ProcessBatchData,但不知何故,它似乎对我不起作用。
谢谢!
我会坚持使用 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();
}
这不是删除项目的正确方法。在此处关注帖子 http://praveenbattula.blogspot.com/2009/05/deleting-list-items-at-time-from-list.html
您只需浏览文档库中的所有文件。
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 方法不会使用回收站。这是直接删除。您仍然需要验证该文件是否未被签出。
这里有一些参考:
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)
}