SPFolder.Exists在存在时返回False

时间:2013-08-28 20:39:37

标签: c# web-services sharepoint

我在连接到Sharepoint的Web服务中有以下代码:

string response = string.Empty;

SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(delegate()
{
    using (SPSite spsite = new SPSite("http://sharepoint/"))
    {
        using (SPWeb spweb = spsite.OpenWeb("sites/" + site))
        {
            spweb.AllowUnsafeUpdates = true;

            SPFolder spfolder = spweb.GetFolder(path);

            /* The following value will always be set to FALSE
             * but the next time spfolder.Exists is called, the
             * returned value will be true.
             */
            //bool exists = spfolder.Exists;

            if (spfolder == null || !spfolder.Exists)
                response = "Folder Does Not Exist!";
            else
                response = "Folder Exists!";
        }
    }
}

return response;

如果我从顶部开始逐步调试它,上面的代码完全正常。如果我在没有调试的情况下运行它,或者如果我稍后在代码中放置一个断点,则SPFolder.Exists值总是设置为false,实际上它应该为true。如果我取消注释上面的bool exists行,那么它将正常工作。

我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

可能的答案:首先要求SPFolder更有趣的属性,甚至可以调用ToString就足够了(可能因为它在调试器中工作,当你悬停时会调用ToString超过spFolder变量。)

答案 1 :(得分:1)

好吧我弄清楚问题是什么。显然,您只能在SPSite对象和SPWeb的站点/子站点中指定网站集。我试图做的是打开一个网站,这是另一个网站集的根网站。

article让我明白了这一点。

将代码更改为类似的内容可以解决问题:

// Specify ONLY the site collection here
using (SPSite spsitecollection = new SPSite("http://sharepoint/sites/" + srcSiteCollection))
{
    // Specify the site/subsite
    using (SPWeb spweb = spsitecollection.OpenWeb(srcSite))
    {

        spweb.AllowUnsafeUpdates = true;

        SPFolder spfolder = spweb.GetFolder(path);

        // No errors anymore!
        if (spfolder == null || !spfolder.Exists)
            response = "Folder Does Not Exist!";
        else
            response = "Folder Exists!";
    }
}