Вопрос

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

Заранее благодарю.: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, "");

Спасибо, наивные.Вы напомнили, что однажды я видел статью, в которой предлагалось то же самое, но в качестве метода расширения в 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);
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top