Ошибка 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;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы