我在连接到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
行,那么它将正常工作。
我在这里做错了吗?
答案 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!";
}
}