如何确定SharePoint SPFolder中是否存在文件

18

除了在SPFolder中循环遍历文件,还有其他方法可以确定给定的文件名(字符串)是否存在吗?

3个回答

30

如果您知道URL,也可以使用SPFile.Exists属性,方法如下:

using (SPSite site = new SPSite("http://server/site"))
using (SPWeb web = site.OpenWeb())
{
  SPFile file = web.GetFile("/site/doclib/folder/filename.ext");
  if (file.Exists)
  {
    ...
  }
}

一开始可能会认为 SPWeb.GetFile 如果文件不存在就会抛出异常。但是实际上,如您所见,这并非如此 - 它将实际返回一个 SPFile 对象。


10

但如果您使用的是SP 2010客户端OM,则如果文件不存在,它实际上会抛出异常:

using(var clientContext = new ClientContext(site))
{
     Web web = clientContext.Web;
     Microsoft.SharePoint.Client.File file = web.GetFileByServerRelativeUrl("/site/doclib/folder/filename.ext");
     bool bExists = false;
     try
     {
         clientContext.Load(file);
         clientContext.ExecuteQuery(); //Raises exception if the file doesn't exist
         bExists = file.Exists;  //may not be needed - here for good measure
     }
     catch{   }

     if (bExists )
     {
           .
           .
     }
}

异常通常是由于尝试执行context.Load(file)而引起的。如果文件不存在,则无法加载完整的对象,因此测试本身会导致结果出错。如果您将clientContext.Load(file)替换为clientContext.Load(file, f => f.Exists),则不会抛出异常。 - Martin D

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接