В моей программе 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);
}
}