1

我有一个具有两级文件夹层次结构的列表。像这样的东西:

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>

如何在上述查询中添加另一个条件,以便在知道确切文件夹名称时可以获取特定文件夹?

4

1 回答 1

3

您可以尝试使用 FileLeafRef 或 FileDirRef 作为名称。不过,我认为这行不通,因为您需要一个 SPFolder 对象来向其添加列表项,并且 CAML 查询返回 SPListItemCollection。查看http://msdn.microsoft.com/en-us/library/bb862315.aspx以获取您可以尝试的一些字段名列表。

既然您知道文件夹的名称(我假设是整个路径),为什么不使用SPWeb.GetFolder方法获取文件夹,然后使用该文件夹对象添加项目?

以下两个链接可能有用:

第二个链接的片段:

使用 OM 在 SPFolder 中创建 SPListItem

使用 WSS 3.0 对象模型创建文件夹 (SPFolder) 很简单。在列表中创建列表项 (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();
}

如果您要上传文件,第一个链接将很有用。如果它只是一个简单的列表项,那么第二个链接(以及我在此处粘贴的代码)可能会很有用。

祝你好运!

于 2010-05-27T16:37:52.127 回答