65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的 FolderViewer 控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.29/5 (7投票s)

2009 年 2 月 6 日

CPOL

2分钟阅读

viewsIcon

34263

downloadIcon

899

本文档解释了如何开发您自己的文件夹查看器控件。

FolderView/img.png

 

引言

 

在本文中,我介绍了一个非常简单的文件夹查看器控件。该控件显示文件夹中包含的文件夹和文件,并允许您导航不同的文件夹,以及返回目录结构。这个项目只是一个起点,供任何想要开发此类控件的人使用。您可能需要开发一个文件浏览应用程序,或者在 Web 应用程序中提供一个自定义的OpenDialogBox

Using the Code

将以下代码添加到您的项目中。此控件的 CSS 嵌入在*.ascx文件中,但是您可以将 CSS 代码放在外部文件中进行修改。

<CY:FolderView ID="FolderView1"  runat="server" Width="600" Height="300" />

控件被赋予一个ID,并设置了widthheight属性。这是所需的所有代码。

代码

有两个foreach循环,分别循环遍历文件夹和文件。每个循环都使用StringBuilder类来构造 HTML 表格。

第一个循环负责列出所选目录中的所有文件夹。第二个循环显示目录中的文件。

这两个循环结合起来,帮助构造一个 HTML 表格,显示文件夹/文件名和上次修改日期。它还显示文件类型。

这两个循环都放在一个GenerateFolder()方法中。当点击“后退”按钮时,该方法也会被使用。

为了显示文件类型,我使用了HashTableFileInfo类的Extension属性。下面的列表 1.2 显示了一个示例用法。

列表 1.1

        type = new Hashtable();
        type.Add(".doc", "Microsoft Word Document");
        type.Add(".txt", "Text Document");
        type.Add(".html", "HTML Document");
        type.Add(".htm", "HTML Document");
        type.Add(".ini", "Configuration File");
        type.Add(".sql", "SQL File");
        type.Add(".gif", "GIF Image");
        type.Add(".jpg", "JPEG Image");
        type.Add(".png", "PNG Image");
        type.Add(".mp3", "Audio File");
        type.Add(".wav", "Audio File");
        type.Add(".avi", "Video File");
        type.Add(".wmv", "Video File");
        type.Add(".exe", "Executable File");
        type.Add(".sys", "System File");
        type.Add(".log", "Log File");

  Response.Write(type[fileInfo.Extension.ToLower()]); 

构造的表格然后被插入到一个 HTML div元素中,允许您使用 CSS 属性overflow:auto在需要时滚动表格。标题(名称、类型、修改日期)被插入到一个单独的div中,该div不属于可滚动的div

导航

导航是通过将文件夹路径添加到查询字符串并对 URL 进行编码来实现的。这并不是一个理想的解决方案,因为查询字符串只能容纳一定数量的字符。

“后退”按钮允许您返回目录结构。这是通过使用LastIndexOf()方法找到‘/’的最后一个位置来实现的。找到位置后,使用Substring()方法返回一个新的字符串,该字符串从string中删除最后一个文件夹。列表 1.2 中的代码说明了这一点。

列表 1.2

protected void btnBack_Click(object sender, EventArgs e)
{
    string AbsolutePath = Request.Url.AbsolutePath;
    folder_path = Server.UrlDecode(Request.QueryString["Folder"]);
    int pos = folder_path.LastIndexOf("\\");
    try
    {
        folder_path = folder_path.Substring(0, pos);
    }
    catch (Exception ex)
    {
        folder_path = "C:\\";
    }
    GenerateFolder();
    Response.Redirect(AbsolutePath + "?Folder=" + Server.UrlEncode(folder_path));
}

执行脚本的绝对路径被存储到一个变量中。这是必需的,因为页面需要使用新的查询字符串进行重定向。

使用try catch块,在发生错误时默认返回到C:\驱动器。

您需要编写代码来实现点击文件名时执行所需的功能。

历史

  • 2009 年 2 月 6 日:初始发布 
© . All rights reserved.