我有一个List,它有两级文件夹层次结构。像这样:
List
Folder_1
SubFolder_1
Item 1_1_1
Item 1_1_2
SubFolder_2
Item 1_2_1
Item 1_2_2
Item 1_2_3
Folder_2
SubFolder_1
Item 2_1_1
Item 2_1_2
Item 2_1_3
SubFolder_2
Item 2_2_1
Item 2_2_2
我想根据某些条件将列表项添加到文件夹中。我不想遍历所有文件夹,因为文件夹的数量更多。所以,我想运行一个CAML查询来获取文件夹。
CAML查询下面给出了列表中的所有文件夹:
<Where>
<Eq>
<FieldRef Name='FSObjType' />
<Value Type='int'>0</Value>
</Eq>
</Where>
如何在上述查询中添加其他条件,以便在知道确切的文件夹名称后可以获取特定文件夹?
答案 0 :(得分:3)
您可以尝试使用FileLeafRef或FileDirRef作为名称。但是,我认为这不会起作用,因为您需要一个SPFolder对象来向其添加列表项,并且CAML查询返回SPListItemCollection。查看http://msdn.microsoft.com/en-us/library/bb862315.aspx以获取您可以尝试的一些字段名列表。
既然您知道文件夹的名称(我假设整个路径),为什么不使用SPWeb.GetFolder方法获取文件夹,然后使用该文件夹对象添加项目?
以下两个链接可能很有用:
第二个链接的摘录:
在SPFolder中创建SPListItem 使用OM
使用创建文件夹(SPFolder) WSS 3.0对象模型很简单。 在a中创建列表项(SPListItem) 列表也很简单。我花了 一段时间和一些电子邮件 最后在一个列表中创建一个列表项 现有文件夹。所以这是代码 为你节省一些时间。
SPSite site = new SPSite("http://[ServerName/sitename]");
SPWeb web = site.OpenWeb();
SPList list = web.Lists["Tasks"];
SPFolder f = web.GetFolder("http://[ServerName/sitename]/Lists/Tasks/Test" );
if(f.Exists)
{
SPListItemCollection itemColl = list.Items;
SPListItem item = itemColl.Add(f.ServerRelativeUrl,
SPFileSystemObjectType.File,
null);
item["Title"] = "Added from OM";
item.Update();
}
如果您要上传文件,第一个链接将非常有用。如果它只是一个普通的列表项,那么第二个链接(以及我在这里粘贴的代码)可能会有用。
祝你好运!