SPList.Filesを列挙することは悪いです
-
22-09-2019 - |
質問
私は、全体のファイルセットを列挙しませんSharePointリストにテキストファイルを追加する方法を探しています。 こののSharePointのベストプラクティスの記事によると、あなたがアクセスしてはなりませんそれはコレクション全体を列挙するため、プロパティをSPList.Files。あなたが実際にすべてのアイテムを使用する場合に限り、それは非常に非効率的です。私がやりたいすべてのは、SharePointリストのルートフォルダに、単一のテキストファイルを追加することです。これまでのところ、私は以下を使用しています:
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
// write some stuff to the stream ...
// create a file-name-safe URL ...
// create a SPFileCollectionAddParameters object ...
// add the file
SPFile newFile = loggingList.RootFolder.Files.Add(fileURL, stream, addProperties);
}
だから、この場合には、SPList.Filesと同じSPList.RootFolder.Filesを列挙している(テキストファイルでのみルートフォルダがあるので)そうであれば、列挙することなく、1つのファイルを追加する方法がありますファイルコレクション?
事前に感謝します。 :D
解決
実際Files.Addを呼び出すと何も間違っているがあります。単純にメンバーへのアクセスは、コレクションを列挙しません。あなたはそれにGetEnumeratorメソッド()を呼び出すか、foreachループでそれを使用した場合、それが列挙をトリガします。
他のヒント
(SPList.Items
に似てますが、単純なリストではなく、ドキュメントライブラリで使用される)SPList.Files
を使用することを恐れなので、私たちは空のコレクションを返すヘルパー関数を作成し、それゆえ、サーバーからすべての項目を取得しない:
public static SPListItemCollection CreateEmptyCollection(SPList List)
{
const string EmptyQuery = "0";
SPQuery q = new SPQuery {Query = EmptyQuery};
return List.GetItems(q);
}
次に、リストに項目を追加するとき、私たちはこのようにそれを実行します。
ListItem = CreateEmptyCollection(someList).Add("/sites/somesite/lists/somelist/path/to/required/folder", SPFileSystemObjectType.File, "");
ありがとうnaivists。
:あなたはSPListの拡張メソッドと同じことを示唆したが、私のこ一回の記事ことを思い出していますpublic static SPListItem AddItemOptimized(this SPList list, string folderUrl,
SPFileSystemObjectType underlyingObjectType, string leafName)
{
const string EmptyQuery = "0";
SPQuery q = new SPQuery
{
Query = EmptyQuery
};
return list.GetItems(q).Add(folderUrl, underlyingObjectType,leafName);
}
所属していません StackOverflow