如何有效删除文档库中的所有文件?

时间:2008-10-31 20:41:55

标签: sharepoint document-library

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

我知道SPWeb.ProcessBatchData,但不知何故它似乎永远不适合我。

谢谢!

4 个答案:

答案 0 :(得分:8)

我会坚持使用ProcessBatchData方法,也许这会有所帮助:

  

Vincent Rothwell已涵盖此内容   最好:   http://blog.thekid.me.uk/archive/2007/02/24/deleting-a-considerable-number-of-items-from-a-list-in-sharepoint.aspx

否则我不确定其他建议是否有效,因为Foreach循环不会希望集合中的项目数随每次删除而变化。

你最好做一个反向循环(我没有测试这段代码,只是一个例子):

for (int i = SPItems.Length - 1; i >= 0; i--)
{
    SPListItem item = SPItems[i];
    item.File.Delete();
}

答案 1 :(得分:3)

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

答案 2 :(得分: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方法不使用回收站。这是一个直接的删除。您仍需要验证文件未签出。

以下是一些参考:

答案 3 :(得分: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)
}