使用Treeview模拟操作系统的文件系统

default.aspx 代码:

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="OsFilesytem._default" %>
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm2</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<iewc:TreeView id="TreeView1" runat="server" AutoPostBack="True" BackColor="#EEEEEE"></iewc:TreeView>
</form>
</body>
</HTML>

default.aspx.cs代码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using Microsoft.Web.UI.WebControls;
using System.IO;

namespace OsFilesytem
{
/// <summary>
/// WebForm2 的摘要说明。
/// </summary>
public class _default : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;

private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
TreeNode newnode=new TreeNode();
newnode.Text="我的电脑";
this.TreeView1.Nodes.Add(newnode);

try 
{
string[] drives = System.IO.Directory.GetLogicalDrives();

foreach (string str in drives)
{
TreeNode tmpNd;
tmpNd=new TreeNode();
tmpNd.Text=str;
this.TreeView1.Nodes[0].Nodes.Add(tmpNd);

//ProcessDirectory(str,tmpNd);
}

}
catch (System.IO.IOException)
{
this.Response.Write("I/O错误!");
}
catch (System.Security.SecurityException)
{
this.Response.Write("没有访问权限!");
}
}
}


public void ProcessDirectory(string targetDirectory,TreeNode TN)
{
if(targetDirectory.ToString()==@"A:\")
{
return;
}

TreeNode tmpNd;
try
{
// Process the list of files found in the directory
string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries)
{
tmpNd=new TreeNode();

//只显示文件名
tmpNd.Text=fileName.Substring(fileName.LastIndexOf(@"\")+1);

//显示文件 全名(路径+名称)
//tmpNd.Text=fileName;

TN.Nodes.Add(tmpNd);
}

// Recurse into subdirectories of this directory  
string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach(string subdirectory in subdirectoryEntries)
{
tmpNd=new TreeNode();

//只显示文件夹名
tmpNd.Text=subdirectory.Substring(subdirectory.LastIndexOf(@"\")+1);

//显示文件夹 全名(路径+名称)
//tmpNd.Text=subdirectory;

TN.Nodes.Add(tmpNd);

//ProcessDirectory(subdirectory,tmpNd);
}
}
catch
{
}
}


/// <summary>
/// 获得当前结点的全名
/// </summary>
/// <param name="TN">当前结点</param>
/// <returns>全名</returns>
private string GetFullName(TreeNode TN)
{
if(TN.Text=="我的电脑")
{
return "我的电脑";
}
string str_fullname="";

while(((TreeNode)TN.Parent).Text!="我的电脑")
{
str_fullname = TN.Text + @"\" + str_fullname;
TN=(TreeNode)TN.Parent;
}
str_fullname =TN.Text + str_fullname;
return str_fullname;
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.TreeView1.Expand += new Microsoft.Web.UI.WebControls.ClickEventHandler(this.TreeView1_Expand);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
TreeNode TNS=this.TreeView1.GetNodeFromIndex(e.Node);

foreach(TreeNode TN in TNS.Nodes)
{
this.ProcessDirectory(this.GetFullName(TN),TN);
}
}
}


OVER
原文地址:https://www.cnblogs.com/RobotTech/p/526254.html