Как получить клиентские каталоги файловой системы в treeview asp.net C # - PullRequest
0 голосов
/ 27 июля 2011

Привет, я занимаюсь разработкой веб-клиентского приложения 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 ]

2 голосов
/ 27 июля 2011

Код, который вы показываете, запускается на сервере.Вы не можете получить доступ к папке клиента там.

Для этого вам понадобится клиентский скрипт или программа, работающая на стороне клиента, и access

Обычно браузер не разрешает доступ к файловой системе.Посмотрите на этот вопрос, чтобы узнать, как это сделать: Приложение для браузера и доступ к локальной файловой системе

1 голос
/ 27 июля 2011

Как говорят другие, ваш серверный код не может прочитать файловую систему клиента.

Ваш лучший вариант - написать и подписать Java-апплет (афпик подписанным апплетам разрешен доступ к файловой системе) и внедрить апплет на веб-страницу. ActiveX также вариант, но он ограничен Internet Explorer.

1 голос
/ 27 июля 2011

Вы не можете получить доступ к клиентской файловой системе и заполнить ее, используя ASP .NET ИЛИ JavaScript.

0 голосов
/ 23 июля 2013

Может быть, вы можете попробовать с 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...