如何在treeview asp.net C#中获取客户端文件系统目录

时间:2011-07-27 07:08:38

标签: c# asp.net treeview filesystems

您好我正在开发一个基于Web的ftp客户端应用程序我想获取客户端文件系统目录并将它们填充到树视图中我尝试此代码但它将提供我的应用程序运行的系统(服务器)的目录,我想要当任何用户通过浏览器访问我的应用程序时,我想加载用户文件系统目录。

这是我试过的代码:

private void fillTree()
        {
            DirectoryInfo directory;
            string sCurPath = "";

            // clear out the old values
            TreeView2.Nodes.Clear();

            // loop through the drive letters and find the available drives.
            foreach (char c in driveLetters)
            {
                sCurPath = c + ":\\";
                try
                {
                    // get the directory informaiton for this path.
                    directory = new DirectoryInfo(sCurPath);

                    // if the retrieved directory information points to a valid
                    // directory or drive in this case, add it to the root of the 
                    // treeView.
                    if (directory.Exists == true)
                    {
                        TreeNode newNode = new TreeNode(directory.FullName);
                        TreeView2.Nodes.Add(newNode);   // add the new node to the root level.
                        getSubDirs(newNode);            // scan for any sub folders on this drive.
                    }
                }
                catch (Exception doh)
                {
                    lblStatus.Text = doh.Message;
                }
            }
        }
        private void getSubDirs(TreeNode parent)
        {
            DirectoryInfo directory;
            try
            {
                // if we have not scanned this folder before
                if (parent.ChildNodes.Count == 0)
                {
                    directory = new DirectoryInfo(parent.ValuePath);
                    foreach (DirectoryInfo dir in directory.GetDirectories())
                    {
                        TreeNode newNode = new TreeNode(dir.Name);
                        parent.ChildNodes.Add(newNode);
                    }
                }

                // now that we have the children of the parent, see if they
                // have any child members that need to be scanned.  Scanning 
                // the first level of sub folders insures that you properly 
                // see the '+' or '-' expanding controls on each node that represents
                // a sub folder with it's own children.
                foreach (TreeNode node in parent.ChildNodes)
                {
                    // if we have not scanned this node before.
                    if (node.ChildNodes.Count == 0)
                    {
                        // get the folder information for the specified path.
                        directory = new DirectoryInfo(node.ValuePath);

                        // check this folder for any possible sub-folders
                        foreach (DirectoryInfo dir in directory.GetDirectories())
                        {
                            // make a new TreeNode and add it to the treeView.
                            TreeNode newNode = new TreeNode(dir.Name);
                            node.ChildNodes.Add(newNode);
                        }
                    }
                }
            }
            catch (Exception doh)
            {
                lblStatus.Text = doh.Message;
               // Console.WriteLine(doh.Message);
            }
        }
        private string fixPath(TreeNode node)
        {
            string sRet = "";
            try
            {
                sRet = node.ValuePath;
                int index = sRet.IndexOf("\\\\");
                if (index > 1)
                {
                    sRet = node.ValuePath.Remove(index, 1);
                }
            }
            catch (Exception doh)
            {
                Console.WriteLine(doh.Message);
            }
            return sRet;
        }

任何人都可以帮我正确执行此任务。

4 个答案:

答案 0 :(得分:2)

您显示的代码在服务器上运行。您无法访问那里的客户端文件夹。

要做到这一点,您需要一个客户端运行脚本或程序,访问

通常,浏览器不允许访问文件系统。请查看此问题,了解如何执行此操作:Browser application & local file system access

答案 1 :(得分:1)

您无法访问客户端文件系统并使用ASP .NET或JavaScript填充它。

答案 2 :(得分:1)

正如其他人所说,您的服务器端代码无法读取客户端的文件系统。

您最好的选择是编写和签署Java小程序(允许已签名的小程序访问文件系统)并将小程序嵌入到网页中。 ActiveX也是一种选择,但它仅限于Internet Explorer。

答案 3 :(得分:0)

可能是您可以尝试使用JavaScript。它将允许您获取驱动器中的文件列表。

<script>
var Fo =new ActiveXObject("Scripting.FileSystemObject");
var StrOut = new String();
var FileName = new String();
var Extention = new String();

function FindFile(FOo)
{
var FSo = new Enumerator(FOo.Files);
for(i=0;!FSo.atEnd();FSo.moveNext())
{
    if(FileName == "*" ||     FSo.item().name.slice(0,FSo.item().name.lastIndexOf(".")).toLowerCase().indexOf(FileName)>-1)
        if(Extention == "*" || FSo.item().name.slice(FSo.item().name.lastIndexOf(".")+1).toLowerCase().indexOf(Extention)>-1){
            StrOut += "<tr "+ ((i%2)? "":"bgcolor=#DDAA55")  +"><td width=50%><font class=find>" + FSo.item().name + "</font></td><td width=25%><font class=find>" + FSo.item().type + "</font></td><td width=50%><font class=find>"+ String(FSo.item().size/(1024*1024)).slice(0,3) +" MB</font></td></tr>";
            i++
            }
}
}

function Scan()
{
FileName = (search.value.lastIndexOf(".")>-1)? search.value.slice(0,search.value.lastIndexOf(".")):(search.value.length>0)? search.value.toLowerCase():"*"; //Get Searched File Name
Extention = (search.value.lastIndexOf(".")>-1)? search.value.slice(search.value.lastIndexOf(".")+1).toLowerCase():"*"; // Get Searched File Extention Name

if(path.value.length>0 && Fo.FolderExists(path.value)){
    StrOut = "<table border=0 width=100% cellspacing=0>"
    FindFile(Fo.GetFolder(path.value));
    outPut.innerHTML = StrOut+"</table>";
    }
else alert("Insert Correct Path Address");
}
</script>

<BODY topmargin="0" leftmargin="0">

<table border=0 width=100% cellspacing="0" style="border-collapse: collapse" cellpadding="2"><tr>
<td dir="ltr" bgcolor="#FFCC00"><b><font face="Arial" size="2">Named :
</font></b> </td>
<td dir="ltr" bgcolor="#FFCC00">
<input size=50 type=text id=search name=search class="Field"></td>
</tr><tr>
<td dir="ltr" bgcolor="#FFCC00">
<p dir="ltr"><b><font face="Arial" size="2">Path : </font></b> </td>
<td bgcolor="#FFCC00">
<input size=50 type=text value="C:\" id=path name=path class="Field" ></td>
</tr><tr>
<td bgcolor="#FFCC00">&nbsp;</td>
<td bgcolor="#FFCC00">
<input type=button value="        Scan          " onclick=Scan() class="Field"></td>
</tr><tr>
<td colspan=2 align=right bgcolor="#FFCC00"><font face=arial size=2><b>Search Result</b></font><hr></td>
</tr><tr>
<td colspan=2 bgcolor="#FFCC00"><div id=outPut></div></td>
</tr></table>
</BODY>
</HTML>