Перечислять SPList.Files плохо - PullRequest
1 голос
/ 27 января 2010

Я ищу способ добавить текстовый файл в список 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.RootFolder.Files совпадает с SPList.Files, в данном случае (поскольку есть только корневая папка с текстовыми файлами), и если да, есть ли способ добавить один файл без перечисления коллекция файлов?

Спасибо заранее. : D

Ответы [ 3 ]

1 голос
/ 27 января 2010

На самом деле нет ничего плохого в вызове Files.Add. Простой доступ к члену не будет перечислять коллекцию. Если бы вы вызвали GetEnumerator () или использовали его в цикле foreach, это вызвало бы перечисление.

0 голосов
/ 27 января 2010

Спасибо наивистам. Вы напомнили, что однажды я видел статью, в которой предлагалось то же самое, но в качестве метода расширения в 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);
    }
0 голосов
/ 27 января 2010

Боясь использовать 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, "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...