8

SharePoint オブジェクト モデルを使用して、特定のドキュメント ライブラリからすべてのドキュメントをプログラムで削除する明確で完全な例を探しています。doclib にはフォルダーが含まれていません。ドキュメントを完全に削除しようとしています (つまり、ごみ箱に入れたくありません)。

私は SPWeb.ProcessBatchData を知っていますが、どういうわけか私にはうまくいかないようです。

ありがとう!

4

4 に答える 4

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 ループを実行するのが最適です (このコードはテストしていません。単なる例です)。

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 に答える