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

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

04.10.2018, 09:39. Показов 31700. Ответов 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
22.10.2018, 09:29  [ТС]
Студворк — интернет-сервис помощи студентам

Не по теме:

День добрый. Надеюсь Ваши выходные прошли хорошо! :)



Добавлено через 58 минут
Сейчас немного "играюсь" с выводом и наконец-то я догнал для чего мы это делали. Теперь достаточно поменять на (-1) и будет за вчера (+1) и будет за завтро! =)

Добавлено через 19 секунд
Классно! Жаль я сам так не умею. (пока)

Добавлено через 1 минуту
Сейчас пробую вывести список файлов, которые подлежат скачиванию, пока не получается
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 09:53

Не по теме:


Цитата Сообщение от Damenikx Посмотреть сообщение
День добрый. Надеюсь Ваши выходные прошли хорошо! :)
Добрый день, не плохо))). Надеюсь у вас тоже.


Цитата Сообщение от Damenikx Посмотреть сообщение
Сейчас пробую вывести список файлов, которые подлежат скачиванию, пока не получается
Пока не торопитесь. Мы еще вторую волну рефакторинга не закончили.
Теперь когда Download() и Download(DateTime Curdate) - идентичны, зачем нам содержать одинаковый код?
Давайте приведем метод Download() к следующему виду:
C#
1
2
3
4
public void Download()
{
   Download(DateTime.Today.AddDay(-1));//по сути здесь та дата которая нужна для автоматического скачивания по умолчанию.
}
Попробуйте в таком же ключе (повторно использовав код для различных дат, получить данные для значений по умолчанию, хоть они у нас и устарели, но все же мы на них потренируемся).
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 10:02  [ТС]
Переписал наш метод Download.

Я так понимаю с Download [Obsolete], можно убирать, дабы он не предупреждал об устаревшем коде?
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 10:04
Цитата Сообщение от Damenikx Посмотреть сообщение
Я так понимаю с Download [Obsolete], можно убирать, дабы он не предупреждал об устаревшем коде?
собсвенно его туда и не надо было ставить)))

Добавлено через 21 секунду
а вот в остальных случаях оставить.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 10:05  [ТС]
Переименовал метод Download в DownloadYestarday добавил

C#
1
2
3
4
public void Download()
{
   Download(DateTime.Today.AddDay(-1));//по сути здесь та дата которая нужна для автоматического скачивания по умолчанию.
}
Создал метод DownloadTomorrow и добавил:

C#
1
2
3
4
public void Download()
{
   Download(DateTime.Today.AddDay(+1));//по сути здесь та дата которая нужна для автоматического скачивания по умолчанию.
}
1
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 10:16
Цитата Сообщение от Damenikx Посмотреть сообщение
Создал метод DownloadTomorrow и добавил:
Видите, теперь изменить дату настолько легко, и не надо искать, а где же ее поправить?
Хорошо, получается, теперь мы все поправили, и все есть в наших классах!
По сути у вас должно получиться 3-и следующих класса:
Класс FTPSettings:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
namespace ConsoleApplication13.WTPWorker
{
    /// <summary>
    /// Класс предназначенный для работы с настройками FTP.
    /// </summary>
    class FTPSettings
    {
        /// <summary>
        /// Адрес фтп-сервера, публичное свойство.
        /// </summary>
        public string FTPAdress 
        {
            get
            {
                return "ftp://1.1.1.1.1"; 
            }
        }
 
        /// <summary>
        /// ///Адрес папки на сегодня, публично свойство.
        /// </summary>
        public string TodayFoladerAdress
        {
            get
            {
                return DateTime.Now.ToString("yyyyMMdd"); 
            }
        }
 
        /// <summary>
        /// Адрес папки для произвольной даты, принимающее в конструкторе произвольную дату.
        /// </summary>
        /// <param name="CurrentDate">Дата для скачивания</param>
        /// <returns>Строку с адресом произвольной даты</returns>
        public string CurrentDateFolderAdress(DateTime CurrentDate)
        {
            return CurrentDate.ToString("yyyyMMdd"); 
        }
 
        /// <summary>
        /// Полный адрес запроса папки на сегодня, публичное свойство.
        /// </summary>
        public string FullFTPAdressToDay 
        {
            get 
            {
                return FTPAdress + TodayFoladerAdress;
            }
        }
 
        /// <summary>
        /// Полный адрес запроса папки для произвольной даты принмающее к конструкторе произвольную дату, публичная строка с конструктором
        /// </summary>
        /// <param name="CurrentDate">Дата на которую необходимо получть адрес</param>
        /// <returns>Строку с полным адресом запроса папки для произвольной даты</returns>
        public string FullFTPAdressCurrentDate(DateTime CurrentDate)
        {
            return FTPAdress + CurrentDateFolderAdress(CurrentDate);
        }
 
        /// <summary>
        /// Логин пользователя ФТП - публичное свойство.
        /// </summary>
        public string UserFTP
        {
            get { return "1111"; } 
        }
 
        public string PwdFTP
        {
            get { return "1111"; } 
        }
 
        /// <summary>
        /// Формируем запрос к ФТП-Серверу. Тип: детальное описание директории.
        /// </summary>
        /// <param name="FolderAdress">Адресс папки откуда будет получена информация</param>
        /// <returns>Сформированный запрос к Фтп-серверу с детальным описанием директории</returns>
        public FtpWebRequest RequestToDirrectoryDetails(string FolderAdress)
        {
            var res = (FtpWebRequest)FtpWebRequest.Create(FolderAdress); 
            res.Credentials = new NetworkCredential(UserFTP, PwdFTP); 
            res.KeepAlive = false;
            res.UseBinary = true;
            res.Method = WebRequestMethods.Ftp.ListDirectoryDetails; 
            return res; 
        }
    }
}
Добавлено через 1 минуту
Кстати, а давайте посмотрим, что же у вас получилось, выложите оставшиеся два класса!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 10:25  [ТС]
Итак:

FtpFilesInfo

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
 
namespace FTPTakermail.FTPWorker
{
    class FtpFilesInfo
    {
        /// <summary>
        /// Заносим список файлов и папок по текущей дате в DirectoryDetailsToDay
        /// </summary>
        [Obsolete("Устарел для работы использовать **CurDateDirectoryDetails(DateTime CurrentDate)**")]
        public List<string> DirectoryDetailsToDay
        {
            get
            {
                var res = new List<string>(); //создаём перенную res в который будем заносить результат теста DirectoryDetailsToDay.
                var settings = new FTPSettings(); //объявляем переменную settings
                var ftp = settings.RequestToDirrectoryDetails(settings.FullFTPAdressToDay); //объявляем переменную ftp. Формируем запрос к фтп-серверу и объявлем адрес папки на произвольную дату.
                var response = (FtpWebResponse)ftp.GetResponse();//объявляем переменную responce, заносим информацию об ответе серевера.
                var responseStream = response.GetResponseStream();//объявляем переменную responseStream заносим информацию об ответе ФТП-сервера.
                var reader = new StreamReader(responseStream);
 
                while (!reader.EndOfStream) //объявляём цикл while в котором определяем конец файла.
                {
                    res.Add(reader.ReadLine());//считывеаем информацию в цикле до тех пор, пока информация не закончится.
                }
                responseStream.Close(); //прерываем занесение информации в responseStream.
                response.Close(); //прерываем соединение с фтп-сервером.
                reader.Close(); //прерываем работу StremReader.
                return res;//возвращаем значение res
            }
        }
        /// <summary>
        /// сюда заносим список файлов и информацию о них по текущей дате
        /// </summary>
        [Obsolete("Устарел, для работы использовать **CurDateFileNames(DateTime CurrentDate)**")]
        public List<string> TodayFileNames
        {
            get
            {
                var res = new List<string>(); //создаём перенную res в который будем заносить результат теста TodayFileNames.
                foreach (var dt in DirectoryDetailsToDay) // создаём цикл foreach 
                {
                    var sep = new char[] //создаём переменную sep
                    {
                        char.Parse(" ") //Преобразуем (пробел) в тип Char.
                    };
                    var Sarr = dt.Split(sep, StringSplitOptions.RemoveEmptyEntries); //создаём переменную Sarr делим строки на пробел
                    if (Sarr.Length > 8 && Sarr[8].Contains(".")) //пррверяем содержит ли наш массив символ "."
                    {
                        res.Add(Sarr[8]);//добавляем результат в Sarr
                    }
                }
                return res; //возвращаем значение res.
            }
        }
        /// <summary>
        /// Проверка на наличите файлов в папке по текущей дате
        /// </summary>
        /// <param name="CurrentDate">Метод для проверки наличия файлов в папке и отправка результатов в параметр RMessage</param>
        /// <param name="RMessage">Переменная для вывода сообщения о результате проверки</param>
        /// <returns>Рузультат проверки</returns>
        public bool CurDateFolderMayConnectt(DateTime CurrentDate, out string RMessage)//объявляем название метода с параметрами
        {
            RMessage = String.Empty;//перменная RMessage изначально пустая (не NULL!)
            var res = false; //изначально переменаня res = false
            try //запускаем цикл try
            {
                var settings = new FTPSettings(); //объявляем переменную settings
                var ftp = settings.RequestToDirrectoryDetails(settings.FullFTPAdressCurrentDate(CurrentDate)); //объявляем переменную ftp. Формируем запрос к фтп-серверу и объявлем адрес папки на текущую дату.
                FtpWebResponse response = (FtpWebResponse)ftp.GetResponse(); //Инкапсулируем запрос
                RMessage = response.StatusDescription;//Заносим результат инкапсуляции
                if (response.StatusCode != FtpStatusCode.CantOpenData)// объявляем цикл, если получилось подключиться к фтп, к папке, то,
                {
                    res = true;//переменная res = true.
                }
                response.Close(); //закрываем и освобождаем соеденение с фтп
            }
            catch (WebException ex) //вводим исключение об ошибке.
            {
                RMessage = string.Format("Сообщение об ошибке: {0} StackTrace:{1}", ex.Message, ex.StackTrace);//сообщение об ошибке
            }
            return res;//возвращаем результат
        }
        /// <summary>
        /// Детальная информация о фйлов в папке на ФТП по текущей дате
        /// </summary>
        /// <param name="CurrentDate">Метод с параметрами возращающий список детальной инфрмации в папке на ФТП по текущей дате</param>
        /// <returns>Результат проверки информации о файлах по текущей дате на ФТП в папке.</returns>
        public List<string> CurDateFileNames(DateTime CurrentDate) //объявляем метод с параметрами
        {
            var res = new List<string>();//создаём переменную res 
            foreach (var dt in CurDateDirectoryDetails(CurrentDate))//объявляем цикл foreach который проверяем строки
            {
                var Sarr = dt.Split(new char[] { char.Parse(" ") }, StringSplitOptions.RemoveEmptyEntries);//убираем пустые строки
                    if (Sarr.Length > 8 && Sarr[8].Contains("."))//проверяем, что информация о файле действительно есть(например: лежит фаайл txt.txt, когда цикл дойдёт до "." завершаем его)
                    {
                        res.Add(Sarr[8]);//заносим результат в res
                    }
            }
            return res; //возвращаем полученный результат
        }
        /// <summary>
        /// Метод возвращающий список файлов в папке на текущую дату
        /// </summary>
        /// <param name="CurrentDate">Параметр возвращий данные по текущей дате</param>
        /// <returns>Список файлов в папке</returns>
        public List<string> CurDateDirectoryDetails(DateTime CurrentDate)
        {
                var res = new List<string>();//создаём перенную res в который будем заносить результат теста CurDateDirectoryDetails
                var settings = new FTPSettings();//объявляем переменную settings
                var ftp = settings.RequestToDirrectoryDetails(settings.FullFTPAdressCurrentDate(CurrentDate));
                var response = (FtpWebResponse)ftp.GetResponse();//объявляем переменную responce, заносим информацию об ответе серевера.
                var responseStream = response.GetResponseStream();//объявляем переменную responseStream заносим информацию об ответе ФТП-сервера.
                var reader = new StreamReader(responseStream);
 
                while (!reader.EndOfStream) //объявляём цикл while в котором определяем конец папки с файлами
                {
                    res.Add(reader.ReadLine());//считывеаем информацию в цикле до тех пор, пока информация не закончится.
                }
                responseStream.Close(); //прерываем занесение информации в responseStream.
                response.Close(); //прерываем соединение с фтп-сервером.
                reader.Close(); //прерываем работу StremReader.
                return res;//возвращаем значение res
        }
    }
}
Добавлено через 58 секунд
FtpDownloader

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
 
namespace FTPTakermail.FTPWorker
{
    class FtpDownloader
    {
        /// <summary>
        /// Сдесь объявляем место, куда будет скачиваться файл в соответствии с сегодняшней датой (значение по умолчанию)
        /// </summary>
        /// string _FileOutPutFolder = "D://FTPFiles/" + DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
        /// <summary>
        /// Обращаемся к значению по умолчанию
        /// </summary>
        string _DefultPath = "D://FTPFiles/";
 
        public string DefultPath
        {
            get { return _DefultPath; }
            set { _DefultPath = value; }
        }
        string _FileOutPutFolder;
 
        public string FileOutPutFolder
        {
            get { return _FileOutPutFolder; } //возвращаем значение по умолчанию
            set { _FileOutPutFolder = value; }
        }
        public FtpDownloader()
        {
        _FileOutPutFolder = _DefultPath + DateTime.Now.ToString("yyyyMMdd");
        }
        /// <summary>
        /// Создаём метод Donwload по умолчанию за вчерашнюю дату
        /// </summary>       
        public void DownloadYestarday()
        {
            Download(DateTime.Today.AddDays(-1)); //Дата, которая нужна для автомотического скачивания по умолчанию
        }
        /// <summary>
        /// Метод для скачивание папки за завтрашнюю дату
        /// </summary>
        public void DonwloadTomorrow()
        {
            Download(DateTime.Today.AddDays(+1)); //Дата, которая нужна для автомотического скачивания по умолчанию
        }
        /// <summary>
        /// Метод скачки файлов
        /// </summary>
        /// <param name="CurrentDate">Параметр скачки по текущей дате</param>
        public void Download (DateTime CurrentDate)//Объявляем метод с параметрами
        {
            FileOutPutFolder = DefultPath + CurrentDate.ToString("yyyyMMdd");//Объявляем переменную FileOutPutFolder и присваиваем ей значение папки по умалчанию и текущей даты
            var settings = new FTPSettings();// Объявляем переменную setting
            string CurDate = DateTime.Now.ToString("yyyyMMdd"); // определяем, что TodayDate будет содержать в себе информацию с датой сегодня шнего дня
            {
                Directory.CreateDirectory("D://FTPFiles/" + CurDate); //создаём папку
            }
            foreach (var fn in new FtpFilesInfo().CurDateFileNames(CurrentDate))//проверяем информацию о файлах с текущей датой
            {
                string ftpfilepath = settings.FullFTPAdressCurrentDate(CurrentDate) + "/" + fn;//обращаемся к фатп адресу
                using (WebClient request = new WebClient())// создаём подключение к фтп-серверу
                {
                    request.Credentials = new NetworkCredential(settings.UserFTP, settings.PwdFTP); //вводим логин, пароль.
                    byte[] filedata = request.DownloadData(ftpfilepath); // объевляем путь, куда будет скачиваться файл
                    using (FileStream file = File.Create(FileOutPutFolder + "/" + fn)) //скачиваем
                    {
                        file.Write(filedata, 0, filedata.Length);//запись списка скачиваемых файлов
                        file.Close();//закрываем
                    }
                }
            }
        }
 
    }
}
1
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 11:02
Цитата Сообщение от Damenikx Посмотреть сообщение
//проверяем, что информация о файле действительно есть(например: лежит фаайл txt.txt, когда цикл дойдёт до "." завершаем его)
не верно, ну вообще
Цитата Сообщение от Damenikx Посмотреть сообщение
if (Sarr.Length > 8 && Sarr[8].Contains("."))
здесь мы смотрим
Если длина массива строк более 8 элементов и 9-ый элемент содержит точку, то
Цитата Сообщение от Damenikx Посмотреть сообщение
C#
1
2
3
{ 
res.Add(Sarr[8]);//заносим результат в res 
}
Цитата Сообщение от Damenikx Посмотреть сообщение
//создаём перенную res в который будем заносить результат теста CurDateDirectoryDetails
Абсолютно не правильно!
Так как про тесты речи не идет!
C#
1
 var res = new List<string>();
По сути в коде мы создаем список строк и ничего более.
Цитата Сообщение от Damenikx Посмотреть сообщение
string CurDate = DateTime.Now.ToString("yyyyMMdd"); // определяем, что TodayDate будет содержать в себе информацию с датой сегодня шнего дня { Directory.CreateDirectory("D://FTPFiles/" + CurDate); //создаём папку }
Я бы здесь добавил проверку, существует ли нужная папка или нет, если нет, то создать папку, если сущесвует, ничего не делать.
Цитата Сообщение от Damenikx Посмотреть сообщение
Directory.CreateDirectory("D://FTPFiles/" + CurDate); //создаём папку
тоже лучше переписать:
C#
1
Directory.CreateDirectory(FileOutPutFolder);
Добавлено через 9 секунд
Цитата Сообщение от Damenikx Посмотреть сообщение
//проверяем, что информация о файле действительно есть(например: лежит фаайл txt.txt, когда цикл дойдёт до "." завершаем его)
не верно, ну вообще
Цитата Сообщение от Damenikx Посмотреть сообщение
if (Sarr.Length > 8 && Sarr[8].Contains("."))
здесь мы смотрим
Если длина массива строк более 8 элементов и 9-ый элемент содержит точку, то
Цитата Сообщение от Damenikx Посмотреть сообщение
C#
1
2
3
{ 
res.Add(Sarr[8]);//заносим результат в res 
}
Цитата Сообщение от Damenikx Посмотреть сообщение
//создаём перенную res в который будем заносить результат теста CurDateDirectoryDetails
Абсолютно не правильно!
Так как про тесты речи не идет!
C#
1
 var res = new List<string>();
По сути в коде мы создаем список строк и ничего более.
Цитата Сообщение от Damenikx Посмотреть сообщение
string CurDate = DateTime.Now.ToString("yyyyMMdd"); // определяем, что TodayDate будет содержать в себе информацию с датой сегодня шнего дня { Directory.CreateDirectory("D://FTPFiles/" + CurDate); //создаём папку }
Я бы здесь добавил проверку, существует ли нужная папка или нет, если нет, то создать папку, если сущесвует, ничего не делать.
Цитата Сообщение от Damenikx Посмотреть сообщение
Directory.CreateDirectory("D://FTPFiles/" + CurDate); //создаём папку
тоже лучше переписать:
C#
1
Directory.CreateDirectory(FileOutPutFolder);
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 11:06  [ТС]
Переделал, как Вы сказали. По поводу массива, комментарий старый, проглядел не исправил, каюсь
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 11:25
Цитата Сообщение от Damenikx Посмотреть сообщение
Переделал, как Вы сказали
Ну что-же, скачивание файлов готово.
У вас остались вопросы?
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 11:41  [ТС]
Да! Есть один, в целях саморазвития. На самом деле их огромное количество, но я не буду вас напрягать уже, а то и так много для меня сделали!

Вопрос: Если возможность, используя уже то, что мы с Вами написали, организовать скачивание с диапазоном даты и времени.

Допустим:

Есть куча файлов, с именами от IloveC#20180101 вплоть до IloveC#20181231. IloveC++20180101 до IloveC++20181231.

И надо скачать файлы, опять же с ФТП, файлы с именем IloveC#20180101 до IloveC#20180701.
То есть мы задаём имя и дату, а он нам скачивает в это диапазоне.

И по поводу файла с настройками. Я спрашивал в другой теме.

Добавлено через 9 минут
И с выводом борюсь, записал таким образом:

C#
1
Console.WriteLine(new FtpFilesInfo().CurDateDirectoryDetails(DateTime.Now))
Вывод:
System.Collections.Ceneric.List'1[System.String]

Ну тут видимо ограниченность моих знаний не позволяет написать правильный вывод
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 11:48
Цитата Сообщение от Damenikx Посмотреть сообщение
Вопрос: Если возможность, используя уже то, что мы с Вами написали, организовать скачивание с диапазоном даты и времени.
Да есть, для этого используется цикл:
C#
1
2
3
4
5
6
7
Download(DateTime Start, DateTime End)
{
   for(DateTime CurDate =Start;CurDate<End;CurDate =CurDate.AddDay(1))
{
  Download(CurDate);
}
}
Цитата Сообщение от Damenikx Посмотреть сообщение
Есть куча файлов, с именами от IloveC#20180101 вплоть до IloveC#20181231. IloveC++20180101 до IloveC++20181231.
Для такого, потребуется понять, что и откуда вы скачиваете, собственно, вам требуется каждый раз менять путь скачивания.
Цитата Сообщение от Damenikx Посмотреть сообщение
То есть мы задаём имя и дату, а он нам скачивает в это диапазоне.
Да, такое возможно, для этого вам нужно организовать перегрузку метода Download(), заметьте, не удалять, не изменять название метода, а именно организовать перегрузку метода. Т.е. по сути написать метод который в качестве аргумента будет принимать строку(при этом не удалять текущий Download(DateTime CurDate)). По сути это означает создать новый метод
C#
1
2
3
4
Download(string FTPPath)
{
  
}
и уже с этим поработать.
Цитата Сообщение от Damenikx Посмотреть сообщение
И по поводу файла с настройками. Я спрашивал в другой теме.
Помниться мне вы спрашивали про проект форм. Но мы пойдем иначе. Но для начала, создайте тему файл настроек для консольного приложения. Где выложите код класса фтп настроек, а вопрос задайте, как мне создать файл настроек, в котором будут такие параметры как в классе?
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 11:57  [ТС]
Ага, я так понимаю (по поводу диапазона), здесь надо будет организовавыть новый класс и новый метод, который будет скачивать файлы по тому критерию который я задал. Предположим. Надо скачать все файлы из папки IloveC#, с датой в имени файлы с 1 октября до 1 ноября. Получается, где-то я должен это задать, а значит, мне надо метод и класс, который будет это организовывать. (Это мои рассуждения по поводу организации рабочего процесса)

Добавлено через 29 секунд

Не по теме:

Тему сейчас создам

0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 11:57
Цитата Сообщение от Damenikx Посмотреть сообщение
Вывод:
System.Collections.Ceneric.List'1[System.String]
все правильно он вам выводит:
List'1[System.String] - это строковое представление списка (метод ToString());
Т.е. он вам выводит, строку наименования класса использованого вами (вспомните, я вас долго журил, что называете переменной экземпляр класса).
Для того что-бы вывести элемент коллекции (список, массив), его надо вызвать, например по индексу:
C#
1
Console.WriteLine(new FtpFilesInfo().CurDateDirectoryDetails(DateTime.Now)[0]);
или при помощи перечислителя индексов:
C#
1
2
3
4
5
var cdd =new FtpFilesInfo().CurDateDirectoryDetails(DateTime.Now);
for(int i=0;i<cdd.Count;i++)
{
   Console.WriteLine(cdd);
}
либо перебором коллекции:
C#
1
2
3
4
foreach(var cdd in new FtpFilesInfo().CurDateDirectoryDetails(DateTime.Now))
{
  Console.WriteLine(cdd);
}
В общем вам выбирать.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 12:06  [ТС]
Точно! Спасибо. Сразу не додумался.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 12:14
Damenikx, еще вопросы будут?
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
22.10.2018, 12:19  [ТС]
Нет, спасибо вам огромное!

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

111.1.1.1:2233/Hello/20181022

Я решил добавить метод

C#
1
2
3
4
public string UnderFolder
{
get{return "Hello";}
}
И немного дописать в связи с этим метод нашего полного пути к папке на фтп:
C#
1
2
FullFTPAdressCurrentDate(DateTime CurrentDate)
{return FTPAdress + UnderFolder + CurrentDateFolderAdress(CurrentDate);}
И что-то пошло не так! Не подключается к фтп.
И я немного не понимаю, как скачивается папка.

Получается мы подключаемся к фтп создаём папку на ЛОКАЛЬНОМ компе с сегодняшней датой и кладём туда файлы, которые лежат в такой же папке на ФТП. Правильно?

Добавлено через 15 минут
Немного разобрался с папкой. Получилось! Но вознакла другая трудность. Не могу скачать за вчерашнюю дату. Есть один нюанс, который наверное этому мешает! Папка с именем вчерашней даты создаётся сегодня. Получается, допустим, папкас именем: 20181021, но создали её СЕГОДНЯ!

Добавлено через 12 минут
Немного подумав головой и постучав по ней бубном, сделал следующее:

Добавил метод

C#
1
2
3
4
5
6
7
8
9
public string FullFTPAdressYestardayDay
{
get{return FTPAdress + UnderFolder + YestardayFolderAdress;}
}
 
public string YestardayFolderAdress
{
get{return DateTime.Now.AddDays(-1).ToString("yyyyMMdd");}
}
Вот только не знаю, на сколько это решение было правильным!

Добавлено через 5 минут
На сколько я помню мы решили отказаться от таких приёмов и сделать программу более униресальной, меняю всего-то один метод по сути.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
22.10.2018, 15:15
Цитата Сообщение от Damenikx Посмотреть сообщение
Вот только не знаю, на сколько это решение было правильным!
правильно сомневаетесь, нужно внизу уходить от частностей (сегодня вчера или определенный день, надо исходить из любой даты.
C#
1
2
3
4
public string FullFTPAdressCurDate(DateTime CurDate)
{
   return FTPAdress + UnderFolder +CurDate.ToString("yyyyMMdd");
}
А уже наверху указывать дату.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2018, 15:15

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
480
Закрытая тема Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru