我正在寻找一种将文本文件添加到SharePoint列表的方法,该列表不会枚举整个文件集。根据this 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
发布于 2010-01-27 06:19:58
实际上,调用Files.Add并没有什么问题。简单地访问成员不会枚举集合。如果对它调用GetEnumerator()或在foreach循环中使用它,就会触发枚举。
发布于 2010-01-27 14:56:02
由于不敢使用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, "");发布于 2010-01-28 04:48:39
感谢天真的人。您应该记得我曾经看过一篇文章,它提出了同样的建议,但将其作为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);
}https://stackoverflow.com/questions/2143055
复制相似问题