在介绍“网络硬盘”概念时已经提到, 每个用户在“网络硬盘”上都有自己的一块空间.在下面程序设计中是这样处理的:为用户提供一个固定的文件夹, 在这个文件夹下用户可以自己增加/删除新的文件夹或文件.如图1所示, 首次打开网页时将列出该文件夹下的所有内容( 包括文件和文件夹 ).如果想进入下一级文件夹, 可以选中该文件夹, 单击“打开”按钮进入.下面将就查看文件夹内容功能的实现分步骤进行说明. 图1 用户主界面
1. 页面加载 由于程序所提供的用户目录是固定的, 如c:UserDir, 而且要求在页面加载后显示该文件夹所有内容, 所以需要在Page_Load中进行相应操作:首先要判断该文件夹是否存在, 如果不存在需要先创建它;
然后再列出该文件夹下的内容, 其代码实现如下:
private void Page_Load( object sender, System.EventArgs e )
{
// 在此处放置用户代码以初始化页面 if( Page.IsPostBack == false )
{
CurrentPath = @"c:UserDir";
//设置当前目录 if( Directory.Exists( @"c:UserDir" ) == false )
//若该目录不存在, 创建该目录 Directory.CreateDirectory( @"c:UserDir" );
LoadDir( CurrentPath );
//初始化装入目录
}
}
LoadDir( string FullPath )方法用来列出该文件夹下的所有内容, 其代码如下:
private void LoadDir( string FullPath )
{
CurrentPath = FullPath;
ArrayList values = new ArrayList( );
string [] MyFiles, MyDirs;
MyFiles = Directory.GetFiles( FullPath );
//得到该目录下所有文件 if( CurrentPath! = @"c:UserDir" )
//若不是顶级目录, 增加“返回上级目录”选项
{
values.Add( "返回上级目录" );
}
values.AddRange( MyFiles );
//加入文件 MyDirs = Directory.GetDirectories( FullPath );
//得到该目录下所有目录 values.AddRange( MyDirs );
//加入目录 FileList.DataSource = values;
//设置数据源 FileList.DataBind( );
//绑定数据
}
首先要定义一个ArrayList数组对象values, 用以存放顶级目录下的所有内容( 包括文件夹名和文件名 ).Directory.GetFiles( )方法返回顶级目录下的所有文件名, 其返回类型为一个string数组, 故需要定义一个string类对象MyFiles来保存返回的文件名;
Directory.GetDirectories( )返回顶级目录下的所有文件夹名称, 同样定义一个string数组对象MyDirs来保存它们.完成这些后就可以把MyFiles和MyDirs数组添加进values对象了.最后要做的只是为ListBox控件对象FileList添加数据源和绑定数据.有一点需要说明:如果当前目录不是顶级目录, 则需要能返回到上级目录, 为此需要在FileList中添加“返回上级目录”选项. 2. 多级目录查看 通过上一部分列出的两段代码, 就可以完成在页面加载时列出顶级目录下的所有内容.当然列出顶级目录下的内容还是不够的, 和Windows操作系统类似, 网络硬盘中文件夹目录也是嵌套的, 存在二级或者多级文件夹目录.为此要进行一些相应的处理, 使得用户可以查看多级文件夹目录内容.前面界面设计中提供了一个“打开”按钮, 用户选择相应的文件夹后, 单击该按钮就可以查看该文件夹下的内容. 下面就为“打开”按钮添加代码.在“设计”面板中双击该按钮, 系统就会自动为其添加事件, 其代码内容如下:
private void btnOpen_Click( object sender, System.EventArgs e )
{
if( FileList.SelectedItem.Text == "返回上级目录" )
//返回上级目录
{
string ParentPath = Directory.GetParent( CurrentPath ).ToString( );
LoadDir( ParentPath );
return;
}
else
//打开目录
{
LoadDir( FileList.SelectedItem.Text );
}
}
程序首先判断用户选中的是不是“返回上级目录”.如果是的话, 则要先通过Directory.GetParent( )方法返回上级文件夹名称, 然后再调用LoadDir( )方法来显示该目录下的内容;
如果用户选中的不是“返回上级目录”而是一个文件夹名称, 则可以直接调用LoadDir( )方法, FileList.SelectedItem.Text为选中的文件夹名, 用来作为LoadDir( )方法的参数.