Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/117: Рейтинг темы: голосов - 117, средняя оценка - 4.85
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533

Скачивание папки с FTP - сервера по актуальной дате

04.10.2018, 09:39. Показов 31525. Ответов 897
Метки ftp, tls (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возможно ли реализовать скачку с фтп папки в которой находятся файлы, папок много, а скачать файлы нужно из той папки, которая названа сегодняшней датой
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2018, 09:39
Ответы с готовыми решениями:

Скачивание папки с FTP - сервера по актуальной дате (2)
Продолжение темы https://www.cyberforum.ru/csharp-net/thread2329455.html var mStr = "20181206_20-15-30.txt"; var dtAr =...

Скачивание папок с FTP-сервера
всем приветик ! подскажите плиииз ! есть батник он подключается к фтп и копирует оттуда файлы все ! open 89.253.247.10 metko ...

Скачивание файла с FTP-сервера
Здравствуйте. Подскажите как загрузить файл с сервера по ftp?

897
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 09:42  [ТС]
Студворк — интернет-сервис помощи студентам
Конечно, добавил.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 09:46
Лучший ответ Сообщение было отмечено Damenikx как решение

Решение

вот вам подсказка в виде картинок:
Миниатюры
Скачивание папки с FTP - сервера по актуальной дате   Скачивание папки с FTP - сервера по актуальной дате  
1
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 09:50
Хорошо, в созданном проекте надо добавить тест (если он еще автоматом не создался).
Проверить что класс FTPSettings, имеет доступ public, если нет, то установить.

Добавлено через 2 минуты
Далее в проекте тестирования должно появиться следующие записи:
C#
1
2
3
4
5
6
7
8
    [TestClass]
    public class TempTest
    {
        [TestMethod]
        public void TestMethod1()
        {
         }
    }
появилось?
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 09:54  [ТС]
Класс FTPSettings сделан публичным. Тест создался.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 10:20
Цитата Сообщение от Damenikx Посмотреть сообщение
Класс FTPSettings сделан публичным. Тест создался.
отлично, теперь давайте его наполним! Мы сделаем два теста, один проверяет что мы получаем правильный ответ при существовании папки, второй что получаем правильный ответ при отсутствии папки. Для этого понадобиться следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    [TestClass]
    public class Test_FTPSettings_DirectoryCheck
    {
         var settings= new FTPSettings {UserFTP="UserFTP", PwdFTP="PwdFTP"};
        [TestMethod]
        public void TestFolderExist()
        {
             string FolderName ="Москва";
            Assert.IsTrue(settings.DirectoryCheck( FolderName), "Не правильное значение проверки, ожидалось: истина, пришло: ложь");
            Console.WriteLine("Тест прошел успешно!");
         }
 
        [TestMethod]
        public void TestFolderNotExist()
        {
             string FolderName ="Кейптаун";
             Assert.IsFalse(settings.DirectoryCheck( FolderName), "Не правильное значение проверки, ожидалось: ложь, пришло: истина");
             Console.WriteLine("Тест прошел успешно!");
         }
    }
Записать это, потом собрать проект, в меню Тест, найти окна и выбрать обозреватель тестов. После чего нажать на Test_FTPSettings_DirectoryCheck - правой кнопкой, и выбрать выполнить все тесты, один из тестов, не пройдет, но это ожидаемое поведение.
Как сделаете, так отпишитесь.

Добавлено через 52 секунды
Ну вот мы и добрались до Тестирования )))
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 10:21  [ТС]
Вот и добрались, ещё один тёмный лес для моих мозгов, как всё сделаю, отпишусь
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 10:24
Обычно, очень хорошо, если вы создали метод, при этом не наполнили его еще, и создаете тесты по ожидаемому поведению, например как вот сейчас, мы проверяем что папка создана или нет. Получается два теста, которые нам позволяют проверить правильно ли работает наш код, и соответсвенно при дальнейших рефакторингах, не позволят ему работать иначе чем задумано.

Добавлено через 1 минуту
Цитата Сообщение от Damenikx Посмотреть сообщение
ещё один тёмный лес для моих мозгов
Это надо выработать привычку, а потом, это не только темный лес, а как раз наоборот луна на ясном небе которая освещает вам путь))).
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 10:43  [ТС]
Луна - это я люблю

По поводу кода, вот этот кусочек:

C#
1
var settings= new FTPSettings {UserFTP="UserFTP", PwdFTP="PwdFTP"};
Не работает, ругается на var О_О, говорит, что пространство имён не удалось найти, соответственно и на FTPSettings в этой строке он тож орёт)

Добавлено через 2 минуты
На сколько я знаю, var используется только внутри метода, он не может идти, как глобальная переменная в классе.

Добавлено через 8 секунд
Попробую засунуть в метод

Добавлено через 2 минуты
Запихнул в метод. Стало ругаться на FTPSettings. Возможно это из-за того, что FTPSettings лежит в папке FTPWorker и его просто не видно, сейчас буду думать.

Добавлено через 6 минут
Что ничего не получается пока что(
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 11:02
Цитата Сообщение от Damenikx Посмотреть сообщение
На сколько я знаю, var используется только внутри метода, он не может идти, как глобальная переменная в классе.
все правильно!
Цитата Сообщение от Damenikx Посмотреть сообщение
Попробую засунуть в метод
не надо
Цитата Сообщение от Damenikx Посмотреть сообщение
Запихнул в метод. Стало ругаться на FTPSettings.
все правильно вам нужно добавить using.
код должен быть следующий:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using Проект_где_лежит_FTPSettings.FTPWorker;
 
 [TestClass]
    public class Test_FTPSettings_DirectoryCheck
    {
         FTPSettings settings= new FTPSettings {UserFTP="UserFTP", PwdFTP="PwdFTP"};
 
        [TestMethod]
        public void TestFolderExist()
        {
             string FolderName ="Москва";
            Assert.IsTrue(settings.DirectoryCheck( FolderName), "Не правильное значение проверки, ожидалось: истина, пришло: ложь");
            Console.WriteLine("Тест прошел успешно!");
         }
 
        [TestMethod]
        public void TestFolderNotExist()
        {
             string FolderName ="Кейптаун";
             Assert.IsFalse(settings.DirectoryCheck( FolderName), "Не правильное значение проверки, ожидалось: ложь, пришло: истина");
             Console.WriteLine("Тест прошел успешно!");
         }
    }
Добавлено через 20 секунд
Цитата Сообщение от Damenikx Посмотреть сообщение
Что ничего не получается пока что(
а теперь?

Добавлено через 2 минуты
подсказка:
как только напишите
C#
1
FTPSettings settings= new FTPSettings {UserFTP="UserFTP", PwdFTP="PwdFTP"};
он подчеркнет FTPSettings, если вы курсор поставите на него, то слева появится лампочка, жмякаем по ней и на первой строке (а может и нет) появится предложение добавить "using Проект_где_лежит_FTPSettings.FTPWorker", жмякаем, и все должно получиться!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 11:11  [ТС]
Эм, проект_где_лежит - это путь указать?

Добавлено через 8 минут
Я похоже понял всю суть моих проблем - это среда разработки. Она аж 2012 года. Надо бы переустановить.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 11:30
Цитата Сообщение от Damenikx Посмотреть сообщение
Я похоже понял всю суть моих проблем - это среда разработки.
не при чем здесь она, вам надо в проекте тестирования, выбрать ссылки, и добавить данные, смотри рисунки:
Миниатюры
Скачивание папки с FTP - сервера по актуальной дате   Скачивание папки с FTP - сервера по актуальной дате  
1
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 11:32
Цитата Сообщение от Damenikx Посмотреть сообщение
Она аж 2012 года.
вообще, это еще с момента создания студии (самых первых версиях) всегда доступно, я вот не знаю с какого момента появились нюгет пакеты, а вот это уж точно давно работает и поддерживается.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 12:03  [ТС]
Всё, разобрался...

Добавлено через 4 минуты
Итак, что я получил:

Тестов проведено: 2.
Тестов сбой (1)
-TestFolderExist 552мс
Тестов пройден (1)
TestFolderNotExist 203мс
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 13:24
Цитата Сообщение от Damenikx Посмотреть сообщение
Всё, разобрался...
посмотри на вывод у каждого теста, ну и собственно это ожидаемый результат.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 13:27  [ТС]
Судя по тесту всё правильно...
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 13:27
Теперь надо читать мат часть о том как получить код не равный
C#
1
FtpStatusCode.PathnameCreated
значит надо переписать код в методе
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
public bool DirectoryExists(string directory)
{
   try
        {
             var ftp = (FtpWebRequest)FtpWebRequest.Create(FTPAdress + directory);
             ftp.Credentials = new NetworkCredential(UserFTP, PwdFTP); ///логин, пароль
             ftp.KeepAlive = false;///не держим соединение после выполнения запроса
             ftp.UseBinary = true;///тип данных для передачи
             ftp.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;
 
               using (FtpWebResponse response = ftp.GetResponse() as FtpWebResponse)
                {                   
                   if(response.StatusCode == FtpStatusCode.PathnameCreated)
                     {
                            //response.Close(); - он нам не нужен потому как пользуемся using, и он все это сделает
                             return true;
                     }
                     else{return false;}
 
                }
               
        }catch
         {            
          return false;
          }
}
возникает вопрос, как?
Есть идеи?
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 13:31  [ТС]
Поменять true и false местами?))))

Добавлено через 1 минуту
Надо сделать наоборот. Сейчас, если значение true то папка существует, а если сделать наоборот, если true то папки нет.

Добавлено через 47 секунд
Но я так пытался сделать, не получилось. Можно попробовать сделать, как вы сказали, если не получаем статус кода, значит папка есть, если получаем нету.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 13:40
давайте проведем испытания, исправим код на следующий:
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
public bool DirectoryExists(string directory)
{
   try
        {
             var ftp = (FtpWebRequest)FtpWebRequest.Create(FTPAdress + directory);
             ftp.Credentials = new NetworkCredential(UserFTP, PwdFTP); ///логин, пароль
             ftp.KeepAlive = false;///не держим соединение после выполнения запроса
             ftp.UseBinary = true;///тип данных для передачи
             ftp.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;
 
               using (FtpWebResponse response = ftp.GetResponse() as FtpWebResponse)
                {          
                    Console.WriteLine(response.StatusCode);
                    Console.WriteLine("{0} {1}", "FTPAdress/" + directory, response.LastModified);
                    Console.WriteLine(response.StatusCode);         
                   if(response.StatusCode == FtpStatusCode.PathnameCreated)
                     {
                            //response.Close(); - он нам не нужен потому как пользуемся using, и он все это сделает
                             return true;
                     }
                     else{return false;}
 
                }
               
        }catch
         {            
          return false;
          }
}
выносите сюда, что вам выведет результат тестирования!

Добавлено через 53 секунды
Цитата Сообщение от Damenikx Посмотреть сообщение
Но я так пытался сделать, не получилось. Можно попробовать сделать, как вы сказали, если не получаем статус кода, значит папка есть, если получаем нету.
это предположение в корне не верно, потому как мы в любом случае получаем один и тот же статус код!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
07.12.2018, 13:47  [ТС]
Не выводит кансоль

Добавлено через 17 секунд
Это наверное надо не в метод, а на кнопку?

Добавлено через 2 минуты
Либо у нас что-то не работает)
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
07.12.2018, 13:49
Цитата Сообщение от Damenikx Посмотреть сообщение
Не выводит кансоль
Добавлено через 17 секунд
Это наверное надо не в метод, а на кнопку?
Добавлено через 2 минуты
Либо у нас что-то не работает)
все выводит!, Нажимаешь на метод тестирования, снизу появляется, окно, там есть ссылка вывод!!! Жмякаешь, копируешь, смотрю.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2018, 13:49

Скачивание файла с ftp сервера
Привет! Решил попробовать написать систему обновления для своей программы. Есть вот такая идея: создать сайт и вручную залить по ftp на...

Скачивание каталога с FTP сервера
Доброго времени суток. Работаю с FTP сервером в C# при помощи библиотеки BytesRoad.Net.Ftp. Появилась необходимость скачивать ВЕСЬ каталог...

Скачивание файлов с FTP сервера на локальный ЖД
Здравствуйте. Возникла проблема, возможно глупая и её решение должно быть элементарным, но всё же :) Добавлено через 9 минут ...

Скачивание файла с FTP-сервера с использованием Wget
Доброго времени суток! Задача - необходим батник чтобы он: 1. Скачивал необходимый файл с ftp(хранилище можем подобрать иное) 2....

Скачивание папки с удаленного сервера
WebClient wb = new WebClient(); wb.DownloadFile("https://cloud.mail.ru/public/46F4/Eqhw66Kb2", @"C:\test\sandbox"); Вот такой код...


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

Или воспользуйтесь поиском по форуму:
700
Закрытая тема Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru