一、使用SPFolderCollection以及SPFolder对象分层次显示文档列表
Shaerpoint的文档库的功能很强大,显示文档列表的方式也很多,我们可以使用系统的视图显示文档,我们也可以定义视图来显示文档列表。在系统提供的视图中您可以选择是否显示文件夹。但是,我们有时候希望向察看本地资源管理器那样的分层查看文档列表,即展现出文档以及文档夹之间的层次关系。我这里介绍使用SPFoldercollection 和SPFolder对象模型来实现这个功能。
首先,由于我们的Webpart可能要用于显示不同的文档库,所以,我们自定义一个属性用于传递您要显示的文档库的名称:
namespace WPDocLibTree
{
/// <summary>
/// Description for WebPart1.
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:WPDocLibTree runat=server></{0}:WPDocLibTree>"),
XmlRoot(Namespace="WPDocLibTree")]
public class WPDocLibTree : Microsoft.SharePoint.WebPartPages.WebPart
{
private const string defaultText = "";
private string text = defaultText;
private string _myDoc="";
[Browsable(true),
Category("Miscellaneous"),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName("Text"),
Description("Text Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
//文档库名称
[Category("文档库定义")]
[DefaultValue("")]
[WebPartStorage(Storage.Personal)]
[FriendlyNameAttribute("文档库名称")]
[Description("请输入要显示的文档库德名称")]
[Browsable(true)]
[XmlElement(ElementName="myDoc")]
public string myDoc
{
get
{
return _myDoc;
}
set
{
_myDoc=value;
}
}
然后,在RenderWebPart来显示我们的文档列表:
protected override void RenderWebPart(HtmlTextWriter output)
{
//首先,我们通过下列语句格式化我们的文档列表:
output.Write("<style><!--.folder1 { font-size: 10pt; color: #000080;margin-left: 50; font-weight:bold;}");
output.Write (".file1 { font-size: 10pt; color: #3366CC;margin-left: 50; }");
output.Write(".folder2 { font-size: 10pt; color: #000080;margin-left: 70; font-weight:bold}");
output.Write (".file2 { font-size: 10pt; color: #3366CC;margin-left: 70 }");
output.Write(".folder3 { font-size: 10pt; color: #000080;margin-left: 90; font-weight:bold}");
output.Write (".file3 { font-size: 10pt; color: #3366CC;margin-left: 90 }");
output.Write(".folder4 { font-size: 10pt; color: #000080;margin-left: 110; font-weight:bold}");
output.Write (".file4 { font-size: 10pt; color: #3366CC;margin-left: 110 }");
output.Write ("--></style>");
//打开当前站点
SPWeb site=SPControl.GetContextWeb(Context);
//获取站点中的所有文件夹
SPFolderCollection folders=site.Folders;
//获取指定的文档库(文件夹)
SPFolder folder=folders[_myDoc];
//获取所有文档
SPFileCollection files=folder.Files;
for(int i=0;i<files.Count;i++)
{
output.Write("<a class='file1' target='_blank' href=' "+files[i].ServerRelativeUrl.ToString()+"'><img border=/"0/" src=/"../_layouts/images/keyword.gif/"> "+files[i].Name.ToString()+"</a><br>");
}
//检查是否有子文件夹
SPFolderCollection subFolders=folder.SubFolders ;
if(subFolders.Count>1)
{
// 显示子文件夹
foreach(SPFolder subFolder in subFolders)
{
//过滤掉系统文件夹“forms”
if(subFolder.Name.ToString().ToUpper()!="FORMS")
{
//folder=subFolder;
output.Write("<a class='folder1' target='_blank' href=' "+subFolder.ServerRelativeUrl.ToString()+"'><img border=/"0/" src=/"../_layouts/images/folder.gif/"> "+subFolder.Name.ToString()+"</a><br>");
SPFileCollection files1=subFolder.Files;
//显示子文件夹中的文件
foreach(SPFile file1 in files1)
{
output.Write("<a class='file2' target='_blank' href=' "+file1.ServerRelativeUrl.ToString()+"'><img border=/"0/" src=/"../_layouts/images/keyword.gif/"> "+file1.Name.ToString()+"</a><br>");
}
}
}
}
二、遍历当前文件夹下的文件
添加Microsoft.Scripting.Runtime组件
添加Microsoft.Scripting.Runtime组件
Imports Scripting
Sub FindFile()
Dim strFileName As String
Dim objFso As FileSystemObject
Dim objFiles As Files
Dim objFile As File
Dim strFileName As String
Dim objFso As FileSystemObject
Dim objFiles As Files
Dim objFile As File
objFso = CreateObject("Scripting.FileSystemObject")
objFiles = objFso.GetFolder("D:/mmsk/").Files
objFiles = objFso.GetFolder("D:/mmsk/").Files
If objFiles.Count = 0 Then
MsgBox("没有任何文件!", vbInformation, "提示")
GoTo Err
End If
MsgBox("没有任何文件!", vbInformation, "提示")
GoTo Err
End If
For Each objFile In objFiles
strFileName = objFile.Name
strFileName = objFile.Name
Response.Write(strFileName)
Response.Write("<br>")
Next
Response.Write("<br>")
Next
Err:
objFile = Nothing
objFiles = Nothing
objFso = Nothing
Exit Sub
End Sub
objFile = Nothing
objFiles = Nothing
objFso = Nothing
Exit Sub
End Sub
三、遍历目录以及目录下文件
添加Microsoft.Scripting.Runtime组件
添加Microsoft.Scripting.Runtime组件
Imports Scripting
Function bianli(ByVal path)
Dim fso = Server.CreateObject("scripting.filesystemobject")
Dim fso = Server.CreateObject("scripting.filesystemobject")
On Error Resume Next
Dim objFolder = fso.GetFolder(path)
Dim objFolder = fso.GetFolder(path)
Dim objSubFolders = objFolder.Subfolders
Dim objSubFolder
For Each objSubFolder In objSubFolders
Dim objSubFolder
For Each objSubFolder In objSubFolders
Dim nowpath = path + "/" + objSubFolder.name
Response.Write(nowpath)
Dim objFiles = objSubFolder.Files
Dim objFile
For Each objFile In objFiles
Response.Write("<br>---")
Response.Write(objFile.name)
Next
Response.Write("<p>")
bianli(nowpath) '递归
Dim objFile
For Each objFile In objFiles
Response.Write("<br>---")
Response.Write(objFile.name)
Next
Response.Write("<p>")
bianli(nowpath) '递归
Next
objFolder = Nothing
objSubFolders = Nothing
fso = Nothing
End Function
objFolder = Nothing
objSubFolders = Nothing
fso = Nothing
End Function
bianli("D:/mmsk")
四、 使用.Net遍历指定目录下的所有文件 (带路径)
Imports System.IO
void GetFiles(string path)
{
//获取当前目录下的所有文件并显示
string[] files = Directory.GetFiles(path);
foreach (string s in files)
{
Response.Write(s + "<br>");
}
//获取当前目录下的所有子目录并进新递归调用
string[] dir = Directory.GetDirectories(path);
foreach (string t in dir)
{
GetFiles(t);
}
}
void GetFiles(string path)
{
//获取当前目录下的所有文件并显示
string[] files = Directory.GetFiles(path);
foreach (string s in files)
{
Response.Write(s + "<br>");
}
//获取当前目录下的所有子目录并进新递归调用
string[] dir = Directory.GetDirectories(path);
foreach (string t in dir)
{
GetFiles(t);
}
}
GetFiles("D:/mmsk");
五、.net遍历所有当前及下级目录,并记录为XML文件
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Xml;
namespace WindowsApplication2
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
const string mypath=@"D:/nba2004 ";
XmlDocument doc=new XmlDocument();
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Xml;
namespace WindowsApplication2
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
const string mypath=@"D:/nba2004 ";
XmlDocument doc=new XmlDocument();
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(192, 232);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(88, 24);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click1);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(192, 232);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(88, 24);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click1);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click1(object sender, System.EventArgs e)
{
string MyPath=mypath.ToUpper();
doc.LoadXml("<FileInfo Name='"+MyPath+"'></FileInfo>");
GetFileInfo(MyPath,doc.DocumentElement);
doc.Save(@"d:/fileinfo.xml");
}
private void GetFileInfo(string strpath,System.Xml.XmlNode node)
{
DirectoryInfo DirInfo=new DirectoryInfo(strpath);
foreach(DirectoryInfo dirinfo in DirInfo.GetDirectories())
{
XmlElement elem = doc.CreateElement("dir");
elem.SetAttribute("Name",dirinfo.Name);
elem.SetAttribute("LastWriteTime",dirinfo.LastWriteTime.ToString());
node.AppendChild(elem);
GetFileInfo(dirinfo.FullName,elem);
}
foreach(FileInfo fileinfo in DirInfo.GetFiles())
{
XmlElement elem = doc.CreateElement("file");
elem.SetAttribute("Name",fileinfo.Name);
elem.SetAttribute("LastWriteTime",fileinfo.LastWriteTime.ToString());
elem.SetAttribute("Length",fileinfo.Length.ToString());
node.AppendChild(elem);
}
}
}
}
}
首先,由于我们的Webpart可能要用于显示不同的文档库,所以,我们自定义一个属性用于传递您要显示的文档库的名称:
namespace WPDocLibTree
{
/// <summary>
/// Description for WebPart1.
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:WPDocLibTree runat=server></{0}:WPDocLibTree>"),
XmlRoot(Namespace="WPDocLibTree")]
public class WPDocLibTree : Microsoft.SharePoint.WebPartPages.WebPart
{
private const string defaultText = "";
private string text = defaultText;
private string _myDoc="";
[Browsable(true),
Category("Miscellaneous"),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName("Text"),
Description("Text Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
//文档库名称
[Category("文档库定义")]
[DefaultValue("")]
[WebPartStorage(Storage.Personal)]
[FriendlyNameAttribute("文档库名称")]
[Description("请输入要显示的文档库德名称")]
[Browsable(true)]
[XmlElement(ElementName="myDoc")]
public string myDoc
{
get
{
return _myDoc;
}
set
{
_myDoc=value;
}
}
然后,在RenderWebPart来显示我们的文档列表:
protected override void RenderWebPart(HtmlTextWriter output)
{
//首先,我们通过下列语句格式化我们的文档列表:
output.Write("<style><!--.folder1 { font-size: 10pt; color: #000080;margin-left: 50; font-weight:bold;}");
output.Write (".file1 { font-size: 10pt; color: #3366CC;margin-left: 50; }");
output.Write(".folder2 { font-size: 10pt; color: #000080;margin-left: 70; font-weight:bold}");
output.Write (".file2 { font-size: 10pt; color: #3366CC;margin-left: 70 }");
output.Write(".folder3 { font-size: 10pt; color: #000080;margin-left: 90; font-weight:bold}");
output.Write (".file3 { font-size: 10pt; color: #3366CC;margin-left: 90 }");
output.Write(".folder4 { font-size: 10pt; color: #000080;margin-left: 110; font-weight:bold}");
output.Write (".file4 { font-size: 10pt; color: #3366CC;margin-left: 110 }");
output.Write ("--></style>");
//打开当前站点
SPWeb site=SPControl.GetContextWeb(Context);
//获取站点中的所有文件夹
SPFolderCollection folders=site.Folders;
//获取指定的文档库(文件夹)
SPFolder folder=folders[_myDoc];
//获取所有文档
SPFileCollection files=folder.Files;
for(int i=0;i<files.Count;i++)
{
output.Write("<a class='file1' target='_blank' href=' "+files[i].ServerRelativeUrl.ToString()+"'><img border=/"0/" src=/"../_layouts/images/keyword.gif/"> "+files[i].Name.ToString()+"</a><br>");
}
//检查是否有子文件夹
SPFolderCollection subFolders=folder.SubFolders ;
if(subFolders.Count>1)
{
// 显示子文件夹
foreach(SPFolder subFolder in subFolders)
{
//过滤掉系统文件夹“forms”
if(subFolder.Name.ToString().ToUpper()!="FORMS")
{
//folder=subFolder;
output.Write("<a class='folder1' target='_blank' href=' "+subFolder.ServerRelativeUrl.ToString()+"'><img border=/"0/" src=/"../_layouts/images/folder.gif/"> "+subFolder.Name.ToString()+"</a><br>");
SPFileCollection files1=subFolder.Files;
//显示子文件夹中的文件
foreach(SPFile file1 in files1)
{
output.Write("<a class='file2' target='_blank' href=' "+file1.ServerRelativeUrl.ToString()+"'><img border=/"0/" src=/"../_layouts/images/keyword.gif/"> "+file1.Name.ToString()+"</a><br>");
}
}
}
}