Я сделал метод, который может сканировать ftp-сервер. Он имеет две части в выражении if ... else. Первая часть в if выполняется, когда список каталогов равен 0, и отделяет папки от файлов (и помещает их в этот список). Затем (потому что список больше не пуст) должно выполняться инструкция else. Он имеет петлю foreach, которая проверяет все элементы списка и объединяет их с адресом ftp и просматривает эту папку. И вот проблема. Похоже, он превращается в бесконечный цикл. Я только хочу проверить папки на сервере и разбить цикл, но похоже, что я не могу найти полезное решение.Как я могу исправить следующий метод?
Вот код:
internal void ListFilesOnServer()
{
ArrayList files = new ArrayList();
if (directories.Count == 0)
{
try
{
FtpWebRequest ftpwrq = (FtpWebRequest)WebRequest.Create(server);
ftpwrq.Credentials = new NetworkCredential(user, passw);
ftpwrq.Method = WebRequestMethods.Ftp.ListDirectory;
ftpwrq.KeepAlive = false;
FtpWebResponse fresponse = (FtpWebResponse)ftpwrq.GetResponse();
StreamReader sr = new StreamReader(fresponse.GetResponseStream());
string temp = "";
while ((temp = sr.ReadLine()) != null)
{
files.Add(temp);
}
temp = String.Empty;
sr.Close();
fresponse.Close();
DirOrFile(files);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
else
{
foreach (string file in directories.ToArray())
{
try
{
FtpWebRequest ftpwrq = (FtpWebRequest)WebRequest.Create(server+"/"+file);
ftpwrq.Credentials = new NetworkCredential(user, passw);
ftpwrq.Method = WebRequestMethods.Ftp.ListDirectory;
ftpwrq.KeepAlive = false;
FtpWebResponse fresponse = (FtpWebResponse)ftpwrq.GetResponse();
StreamReader sr = new StreamReader(fresponse.GetResponseStream());
string temp = "";
while ((temp = sr.ReadLine()) != null)
{
files.Add(temp);
}
temp = String.Empty;
sr.Close();
fresponse.Close();
DirOrFile(files);
}
catch(ArgumentException)
{
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
ListFilesOnServer();
}
Куда он застревает? вы проверяли его с помощью контрольных точек? – Shaharyar
Операция else не запускается после if, просто имеет код follow.an if, если вы хотите, чтобы это произошло (нет) – Sayse
Вы застреваете в цикле, потому что вы вызываете функцию рекурсивно, даже не устанавливая каталоги – Sayse