Ошибка cannot access a disposed object - C#
Формулировка задачи:
Доброго времени суток!!!
Есть функция, получающая список дирректорий на FTP сервере (getDirList()). При первом её вызове всё нормально, а при втором, когда меняется ftp хост она выдаёт ошибку cannot access a disposed object. Уже и закрывал поток, что только не пробавал, но проблема остаётся...
здесь происходят вызовы функции
вот сама функция
В чём может быть проблема?
//имя папки с текущей датой String dateFolder = date.Year + "-" + month + "-" + date.Day; String[] dirList = ftp.getDirList().ToArray(); if (!notExists(dirList, dateFolder)) ftp.createDir(dateFolder); else ftp.host = ftp.host + dateFolder + "/"; dirList = ftp.getDirList().ToArray(); if (notExists(dirList, orderNumber)) { //если существует, ищем другое имя String buff = orderNumber; int it = 1; //подбираем уникальное имя папки while (notExists(dirList, buff)) { buff = orderNumber + " (" + it + ")"; it++; } //создаём директорию ftp.createDir(buff); } else ftp.createDir(orderNumber);
public List<string> getDirList() { List<string> lst = new List<string>(); //try //{ FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri(host)); requestDir.Method = WebRequestMethods.Ftp.ListDirectory; requestDir.Credentials = new NetworkCredential(user, password); requestDir.UsePassive = true; requestDir.UseBinary = true; requestDir.KeepAlive = false; FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse(); Stream stream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.Default)) { if (stream != null) do lst.Add(reader.ReadLine()); while (!reader.EndOfStream); reader.Close(); } stream.Close(); response.Close(); /*} catch(Exception e) { procErrorEvent(this, new EventFtpErrorArgs(e.Message)); }*/ return lst; }
Решение задачи: «Ошибка cannot access a disposed object»
textual
Листинг программы
public List<string> getDirList() { List<string> lst = new List<string>(); try { FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri(host)); requestDir.Method = WebRequestMethods.Ftp.ListDirectory; requestDir.Credentials = new NetworkCredential(user, password); requestDir.UsePassive = true; requestDir.UseBinary = true; requestDir.KeepAlive = false; FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse(); using (Stream stream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream, Encoding.Default)) { if (stream != null) { String str = ""; do { str = reader.ReadLine(); if (str != null) lst.Add(str); } while (str != null); } } stream.Close(); } response.Close(); } catch(Exception e) { procErrorEvent(this, new EventFtpErrorArgs(e.Message)); } return lst; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д