Стример и ридер не могут читать папки и файлы в директории - PullRequest
0 голосов
/ 07 апреля 2020

В моей программе c# windows у меня есть Treeview, которая должна быть заполнена файлами и каталогами, взятыми с сервера через FtP. Проблема в том, что я могу взять только папки первого уровня с этим кодом:

    private void RecreateTree(string drive)
    {
        treeView1.Nodes.Clear();
        treeView1.ImageList = Images;
        TreeNode node;
        dtId.Clear();
        OleDbDataAdapter da = new OleDbDataAdapter();
        string sqlNome = "SELECT DISTINCT Id, Descrizione FROM AmiantoAllegatiCartelle WHERE Livello = 1";
        Modulo.SqlDownloadData(Modulo.PathDBDati, sqlNome, ref da);
        da.Fill(dtId);
        foreach (DataRow r in dtId.Rows)
        {
            node = treeView1.Nodes.Add(r["Descrizione"].ToString(), r["Descrizione"].ToString(), 0, 0);
            string sottocartella = cartella + r["Descrizione"].ToString();
            AddChildren(sottocartella, ref node);
        }
    }

Но когда я пытаюсь получить дочерние элементы этих каталогов, свойство CanRead из Streamer go становится ложным .

Вот код:

    private void AddChildren(string sPath, ref TreeNode n)
    {
        if (n.ToString().IndexOf(".") == -1)
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(sPath);
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            request.Credentials = new NetworkCredential(Modulo.UserNameFTP, Modulo.passwordFTP);
            WebResponse response = (FtpWebResponse)request.GetResponse();
            Stream streamer = response.GetResponseStream();
            StreamReader reader = new StreamReader(streamer);
            string sottocartella;
            do
            {
                sottocartella = reader.ReadLine();
                if (sottocartella != null)
                {
                    if (sottocartella.Length > 2)
                    {
                        if (sottocartella.IndexOf(".") > -1)
                            n.Nodes.Add(sottocartella, sottocartella, 2, 2);
                        else
                            n.Nodes.Add(sottocartella, sottocartella, 0, 0);
                    }
                }
            }
            while (sottocartella != null);
            response.Close();
        }
    }

Вы можете мне помочь? Спасибо

РЕДАКТИРОВАТЬ, вот полный код дерева

    private void SetDrives()
    {
        RecreateTree(cartella);
    }

    private void RecreateTree(string drive)
    {
        treeView1.Nodes.Clear();
        treeView1.ImageList = Images;
        TreeNode node;
        dtId.Clear();
        OleDbDataAdapter da = new OleDbDataAdapter();
        string sqlNome = "SELECT DISTINCT Id, Descrizione FROM AmiantoAllegatiCartelle WHERE Livello = 1";
        Modulo.SqlDownloadData(Modulo.PathDBDati, sqlNome, ref da);
        da.Fill(dtId);
        foreach (DataRow r in dtId.Rows)
        {
            node = treeView1.Nodes.Add(r["Descrizione"].ToString(), r["Descrizione"].ToString(), 0, 0);
            string sottocartella = cartella + r["Descrizione"].ToString();
            AddChildren(sottocartella, node);
        }
    }

    private void AddChildren(string sPath, TreeNode n)
    {
        if (n.ToString().IndexOf(".") == -1)
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(sPath);
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            request.Credentials = new NetworkCredential(Modulo.UserNameFTP, Modulo.passwordFTP);
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream streamer = response.GetResponseStream();
            StreamReader reader = new StreamReader(streamer);
            string sottocartella;
            do
            {
                sottocartella = reader.ReadLine();
                if (sottocartella != null)
                {
                    if (sottocartella.Length > 2)
                    {
                        if (sottocartella.IndexOf(".") > -1)
                            n.Nodes.Add(sottocartella, sottocartella, 2, 2);
                        else
                            n.Nodes.Add(sottocartella, sottocartella, 0, 0);
                    }
                }
            }
            while (sottocartella != null);
            response.Close();
        }
    }

    private void TreeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
    {
        TreeNode node = new TreeNode();
        foreach (TreeNode n in e.Node.Nodes)
        {
            node = n;
            n.Nodes.Clear();
            AddChildren(cartella + n.FullPath, node);
        }
        e.Node.ImageIndex = 1;
        e.Node.SelectedImageIndex = 1;
    }

    private void TreeView1_AfterCollapse(object sender, TreeViewEventArgs e)
    {
        e.Node.ImageIndex = 0;
        e.Node.SelectedImageIndex = 0;
    }

    private void TreeView1_DoubleClick(object sender, EventArgs e)
    {
        // (TreeView1.SelectedNode.Name) restituisce il nome del nodo selezionato
        // (TreeView1.SelectedNode.FullPath) restituisce il percorso dal nodo principale
        if (treeView1.SelectedNode.Name.IndexOf(".") > -1)
        {
            string nomefile = treeView1.SelectedNode.Name;
            string percorso = cartella + treeView1.SelectedNode.Parent.FullPath + "/";
            Modulo.ImportaFileAllegato(nomefile, percorso);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...