Frage

Ich bin auf der Suche nach einer Möglichkeit, eine Textdatei zu einer Sharepoint-Liste hinzuzufügen, die den gesamten Dateisatz nicht aufzählen NIMMT. Nach diese Sharepoint Best Practices Artikel, sollten Sie keinen Zugriff auf die SPList.Files Eigenschaft, weil sie die gesamte Sammlung aufzählt. Es sei denn, Sie tatsächlich jedes Einzelteil wollen, dann ist es sehr ineffizient. Alles, was ich tun möchte, ist eine einzelne Textdatei in den Stammordner einer Sharepoint-Liste hinzufügen. Bisher verwende ich die folgende:

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

}

So ist, Aufzählen SPList.RootFolder.Files die gleiche wie SPList.Files, in diesem Fall (da es nur ein Stammordner mit Textdateien), und wenn ja, ist es eine Möglichkeit, eine einzelne Datei hinzufügen, ohne das Aufzählen Dateisammlung?

Vielen Dank im Voraus. : D

War es hilfreich?

Lösung

Eigentlich ist es nichts falsch mit Files.Add aufrufen. Einfach das Mitglied Zugriff auf die Sammlung nicht aufzuzählen. Wenn Sie sind GetEnumerator () auf sie anrufen oder sie in einer foreach-Schleife verwenden, das würde die Aufzählung auslösen.

Andere Tipps

Aus Angst SPList.Items (ähnlich SPList.Files, aber in einfachen Listen verwendet, nicht Dokumentbibliotheken) zu verwenden, haben wir eine Hilfsfunktion, dass die Renditen eine leere Auflistung, damit nicht alle Elemente vom Server holen:

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

Dann, wenn Elemente zu einer Liste hinzugefügt haben, wir tun es wie folgt aus:

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

Danke naivists. Sie haben daran erinnert, dass ich einmal sehen ein Artikel, der das Gleiche, aber als Erweiterung Methode auf SPList vorgeschlagen:

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);
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top