当前文件夹下面有多少个文件
一不小心,理解错了别人,结果就写出了一个统计当前打开的文件夹下面,有多少个文件的一个Web Part。
索性放在网络上,和大家共享了。下面是一个简单描述:
1. 在Portal上或者WSS站点上,放置一个文档库或者一个图片库。
2. 同时,添加这个Web Part。
3. 点击文档库或者图片库中的一个文件夹。
4. 这个Web Part会把这个文件夹中有多少个文件显示出来。
实现的原理:
1. 在点击一个文档库或者图片库中的一个文件夹的时候,在IE的URL中,会出现类似下面的地址:
https://server/default.aspx?RootFolder=/doc/abc?View=xxx
2. 获得这个URL,然后解析出来:
1) Portal上的Area或者WSS站点的URL,也就是RootFolder前面的地址。
2) 具体的文档库或者图片库和其中的文件夹。也就是在RootFolder和View当中的信息。
但这里有一点:这里会包含部分Site的URL信息,需要滤掉。
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;
}
}
}
Comments
- Anonymous
September 24, 2004
great.
btw: just say Hello to you. - Anonymous
September 24, 2004
Thanks!
Hope this site can be helpful to you.