Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
3 / 3 / 0
Регистрация: 26.09.2010
Сообщений: 17
1

Скачивание с фтп

27.09.2010, 22:23. Показов 1297. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Пытаюсь сделать скачку архива средствами c#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
      FtpWebRequest reqFTP;
 
      string ftpServerIP = "1.1.1.1";
      string filePath = ".";
      string fileName = clversion + ".rar";
      string ftpUserID = "tf2";
      string ftpPassword = "tf2";
      FileStream outputStream = new FileStream(filePath + "\\\\" + fileName, FileMode.Create);
       
      reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpUserID + ":" + ftpPassword + "@" + ftpServerIP + "/launch/" + clversion + "/" + fileName));
      reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
       reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
      reqFTP.UseBinary = true;
      reqFTP.UsePassive = false;
      FtpWebRequest fsize = FtpWebRequest.Create("ftp://" + ftpUserID + ":" + ftpPassword + "@" + ftpServerIP + "/launch/" + clversion + "/" + fileName) as FtpWebRequest;
      fsize.Method = WebRequestMethods.Ftp.GetFileSize;
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
      Stream ftpStream = response.GetResponseStream();
      dataLength = fsize.GetResponse().ContentLength;
      float filesize = dataLength / 1048576; 
      long cl = response.ContentLength;
      int bufferSize = 1024;
      int readCount;
      byte[] buffer = new byte[bufferSize];
      readCount = ftpStream.Read(buffer, 0, bufferSize); 
       while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
                Application.DoEvents();
            }
           
            Application.DoEvents();
              
            ftpStream.Close();
            outputStream.Close();
            response.Close();
В 3 из 5 попытках скачки, программа зависает примерно на 99% скачки в цикле на строчке readCount = ftpStream.Read(buffer, 0, bufferSize);
На фтп сервере пишет, что соединение закрыто клиентом. Пробовал на локальном фтп сервере, на той же машине что и программа, никаких проблем нету.

В чем может быть дело?

Добавлено через 23 часа 42 минуты
Может будут какие идеи? В момент зависания программы значение readCount < bufferSize т.е. последний раз выполняется цикл.

Может проблемы в самом фтп? Попробуйте кто-нибудь использовать этот код в своем методе для скачки с фтп и скажите результат
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2010, 22:23
Ответы с готовыми решениями:

Скачивание файлов с ФТП
столкнулся с проблемой закачики файлов с фтп имена которых содержат кирилицу, есть решение?

Программа фтп-клиент скачивает файл с большим размером, чем он есть на фтп-сервере
Здравствуйте! Есть программа фтп-клиент, работает через консоль под Linux, после подключения к...

ФТП
Вот бат файл: @echo off ftp -s:ftp_cmd.txt -n Вот файл ftp_cmd.txt: open ftp.ft5pft4p.h16.ru...

фтп
возможно тему создал не там где надо,но у меня возникла проблема после отправки по командному...

5
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
28.09.2010, 11:41 2
Я бы сделал так.
C#
1
2
3
4
5
6
7
8
while (readCount > 0)
            {
                int readLength=dataLength > bufferSize? bufferSize:dataLength;
outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, readLength);
dataLength-=readCount;
                Application.DoEvents();
            }
Иногда на сокетных операциях, когда данных остается меньше, чем размер буфера сокеты подвисают.
0
3 / 3 / 0
Регистрация: 26.09.2010
Сообщений: 17
29.09.2010, 01:23  [ТС] 3
Пришлось еще с приведением типов поиграться, но в результате все равно виснет в конце скачки :-(
Очень нужно исправить..
0
3 / 3 / 0
Регистрация: 26.09.2010
Сообщений: 17
13.10.2010, 22:04  [ТС] 4
Если кому интересно, то решилась проблема добавлением
reqFTP.KeepAlive = false;

Добавлено через 4 часа 43 минуты
А нет, попробовал тянуть файл побольше снова завис..
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
13.10.2010, 23:54 5
Кстати, файлик, случайно, весом не более 128М?
0
3 / 3 / 0
Регистрация: 26.09.2010
Сообщений: 17
13.10.2010, 23:55  [ТС] 6
30 мб
0
13.10.2010, 23:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2010, 23:55
Помогаю со студенческими работами здесь

Верстка на ФТП
Добрый вечер! Знакомые попросили переделать домашнею страницу сайта-добавить пару блоков,...

фтп-сервер
есть роутер и вайфай дома. к роутеру витой парой подкоючен пк с 3тб пзу. так же есть андроид...

Траблы с ФТП
Привет всем. Проблема такая, я заливаю на фтп текстовый файл – нормально, он читабельный, заливаю...

Соединение с фтп
Подскажите пожалуйста как правильно выполнить соединение с фтп сервером и загрузку указанного файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru