Question

Je cherche un moyen d'ajouter un fichier texte à une liste SharePoint qui n'énumère tout l'ensemble de fichiers. Selon cette l'article SharePoint meilleures pratiques, vous ne devriez pas accéder à la SPList.Files propriété parce qu'elle énumère toute la collection. À moins que vous voulez réellement tous les éléments, il est très inefficace. Tout ce que je veux faire est d'ajouter un seul fichier texte dans le dossier racine d'une liste SharePoint. Jusqu'à présent, je me sers de ce qui suit:

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);  

}

Alors, est-SPList.RootFolder.Files même énumération que SPList.Files, dans ce cas (car il n'y a qu'un dossier racine avec des fichiers texte) et si oui, est-il un moyen d'ajouter un seul fichier sans l'énumération collection de fichiers?

Merci d'avance. : D

Était-ce utile?

La solution

En fait, il n'y a rien de mal à appeler Files.Add. Le fait d'accéder membre ne sera pas énumérer la collection. Si vous deviez appeler GetEnumerator () sur elle ou l'utiliser dans une boucle foreach, qui déclencherait l'énumération.

Autres conseils

Avoir peur d'utiliser SPList.Items (similaire à SPList.Files, mais utilisé dans les listes simples, pas des bibliothèques de documents), nous avons créé une fonction d'aide qui retourne une collection vide, donc pas aller chercher tous les éléments du serveur:

public static SPListItemCollection CreateEmptyCollection(SPList List)
 {
   const string EmptyQuery = "0";
   SPQuery q = new SPQuery {Query = EmptyQuery};
   return List.GetItems(q);
 }

Ensuite, lors de l'ajout d'éléments à une liste, nous le faisons comme ceci:

ListItem = CreateEmptyCollection(someList).Add("/sites/somesite/lists/somelist/path/to/required/folder", SPFileSystemObjectType.File, "");

Merci naivists. Vous avez rappelé qu'une fois que je voyais un article qui a suggéré la même chose, mais comme une méthode d'extension sur 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);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top