ドキュメントライブラリ内のすべてのファイルを効率的に削除する方法は?
-
05-07-2019 - |
質問
私は、Sharepointオブジェクトモデルを介して、特定のドキュメントライブラリからすべてのドキュメントをプログラムで削除する明確で完全な例を探しています。 doclibにはフォルダーが含まれていません。ドキュメントを完全に削除したい(つまり、ごみ箱に入れたくない)。
SPWeb.ProcessBatchDataを知っていますが、どういうわけかそれが私にとってうまくいかないようです。
ありがとう!
解決
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();
}
他のヒント
これはアイテムを削除する正しい方法ではありません。 投稿をフォローする 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)
}