Welcome to MSDN Blogs Sign in | Join | Help

当前文件夹下面有多少个文件

一不小心,理解错了别人,结果就写出了一个统计当前打开的文件夹下面,有多少个文件的一个Web Part

 

索性放在网络上,和大家共享了。下面是一个简单描述:

 

1. Portal上或者WSS站点上,放置一个文档库或者一个图片库。

2. 同时,添加这个Web Part

3. 点击文档库或者图片库中的一个文件夹。

4. 这个Web Part会把这个文件夹中有多少个文件显示出来。

 

实现的原理:

 

1. 在点击一个文档库或者图片库中的一个文件夹的时候,在IEURL中,会出现类似下面的地址:

http://server/default.aspx?RootFolder=/doc/abc?View=xxx

 

2. 获得这个URL,然后解析出来:

1) Portal上的Area或者WSS站点的URL,也就是RootFolder前面的地址。

2) 具体的文档库或者图片库和其中的文件夹。也就是在RootFolderView当中的信息。

但这里有一点:这里会包含部分SiteURL信息,需要滤掉。

 

3. 根据Portal上的Area或者WSS站点的URL,得到SPWeb对象。

 

4. 根据具体的文档库或者图片库和其中的文件夹,得到对应的文件夹。然后得到里面的文件数目。

 

5. 完成。

 

不足:

=====

 

肯定很多,我现在能想到的,明显的是:

 

1. 只能放在能添加Web Part的地方。(不是废话,而是有些地方不大好加Web Part

 

2. 如果在根目录下,那么IE中的URL不会有RootFolder的信息,所以,无效。

 

下面是完整的代码。还是那句话,实现功能,暂时不追求别的了。

 

 

using System;

using System.ComponentModel;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Xml.Serialization;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Utilities;

using Microsoft.SharePoint.WebPartPages;

 

namespace shownumber

{

      /// <summary>

      /// Description for WebPart1.

      /// </summary>

      [DefaultProperty("Text"),

           ToolboxData("<{0}:WebPart1 runat=server></{0}:WebPart1>"),

           XmlRoot(Namespace="shownumber")]

      public class shownumberpart : Microsoft.SharePoint.WebPartPages.WebPart

      {

           private const string defaultText = "";

 

           private string text = defaultText;

 

           [Browsable(true),

                 Category("Miscellaneous"),

                 DefaultValue(defaultText),

                 WebPartStorage(Storage.Personal),

                 FriendlyName("Text"),

                 Description("Text Property")]

           public string Text

           {

                 get

                 {

                      return text;

                 }

 

                 set

                 {

                      text = value;

                 }

           }

          

           /// <summary>

           ///  This method gets the custom tool parts for this Web Part by overriding the

           ///  GetToolParts method of the WebPart base class. You must implement

           ///  custom tool parts in a separate class that derives from

           ///  Microsoft.SharePoint.WebPartPages.ToolPart.

           ///  </summary>

           ///<returns>An array of references to ToolPart objects.</returns>

//         public override ToolPart[] GetToolParts()

//         {

//              ToolPart[] toolparts = new ToolPart[2];

//              WebPartToolPart wptp = new WebPartToolPart();

//              CustomPropertyToolPart custom = new CustomPropertyToolPart();

//              toolparts[0] = wptp;

//              toolparts[1] = custom;

//              return toolparts;

//         }

          

           /// <summary>

           /// Render this Web Part to the output parameter specified.

           /// </summary>

           /// <param name="output"> The HTML writer to write out to </param>

           ///

 

           protected override void RenderWebPart(HtmlTextWriter output)

           {

                 string pageurl = this.Page.Request.Url.ToString();

                 string renderresult;

 

 

                 int rootpos = pageurl.IndexOf("RootFolder");

                 if (rootpos != -1)

                 {

 

                      string siteurl = pageurl.Substring(0,rootpos-1);

                       siteurl = siteurl.Substring(0,siteurl.LastIndexOf("/"));

 

                      string rooturl = pageurl.Substring(rootpos-1);

                      int viewpos = rooturl.IndexOf("&View");

 

                      rooturl = rooturl.Substring(13,viewpos-13);

                      //remove "?RootFolder=/"

 

                      //The following code is use to get the correct list and folder name

                      //By default after "RootFolder" there will be some additional information like "sites/sitename"

 

                      string tempfolder = siteurl.Substring(7);

 

                      int temppos = tempfolder.IndexOf("/");

 

                      if(temppos!= -1)

                      {

                            tempfolder = tempfolder.Substring(temppos+1);

                            rooturl = rooturl.Substring(tempfolder.Length+1);

 

                      }

 

                      int itemnum = getitemnum(siteurl,rooturl);

 

 

                      renderresult = "There are " + itemnum.ToString() + " items in this folder.";

                 }

                 else

                 {              

 

                      renderresult = "This is one top folder. <BR>The web part does not support the function.";

 

                 }

 

                 output.Write(renderresult);

           }

 

           int getitemnum(string siteurl,string rooturl)

           {

 

                 SPWeb myweb = new SPSite(siteurl).OpenWeb();

 

                 SPFolder myfolder = myweb.GetFolder(rooturl);

 

                 SPFileCollection myitems = myfolder.Files;

 

                 return myitems.Count;             

 

           }

      }

}

Published Thursday, September 23, 2004 7:01 PM by oliverlu
Filed under:

Comments

# re: 当前文件夹下面有多少个文件

great.

btw: just say Hello to you.
Friday, September 24, 2004 4:24 PM by Bao Yi

# re: 当前文件夹下面有多少个文件

Thanks!

Hope this site can be helpful to you.
Friday, September 24, 2004 5:54 PM by luming
New Comments to this post are disabled
 
Page view tracker