FTPSReportsDownloader
Описание
Downloads all files from a remote FTPS server to a local path. Reference code v1.0 (c) MOEX 2016 updated to v2.0 2023
Языки
- C#92,4%
- Batchfile7,6%
FTPSReportsDownloader
Downloads all files from a remote FTPS server to a local path.
Reference code v1 (c) MOEX 2016 updated by me to v2.2023, to v9.2025.
v9.2025
- Update project to .NET 8-9 for Windows and Linux.
- Refactor config to
.json - Refactor to use
(//TODO NuGet).Diev.Extensions - Secure the network credential with Windows Credential Manager.
Settings / Параметры
Appsettings с именем исполняемой программы - в отличие от принятого при разработке в .NET единого имени, так можно все файлы настроек разных программ размещать в одной папке для скриптов, но при этом какие-то общие параметры (будут иметь приоритет) вынести из папки с программой, где они могут быть нечаянно затерты при обновлении версии или конфиденциальная информация может попасть в дистрибутивный архив:
(located with AppFTPSReportsDownloader.config.json)exe(these settings overwrite if exist)%ProgramData%\Diev\FTPSReportsDownloader.config.json
Однако, при запуске в Linux программа может не получать путь к папке
с программой - тогда она будет искать традиционный
в текущей папке.
Windows Credential Manager в Панели управления - Диспетчер учетных данных
(все пароли для всех программ меняются в одном месте и скрыты от
пользователей, как было бы при хранении в индивидуальных файлах настроек
к каждой программе). Программа использует поле из
для указания, где искать и :
(name:"host", user:{host}, pass:{username}){password}
Однако в Linux такой программы нет, и все параметры надо написать в JSON
открытым текстом (в Windows тоже так можно, игнорируя безопасность, или
же можно вынести в отдаленную папку в ):
(три параметра)"TargetName": "{host} {username} {password}"
Build / Построение
Build an app with many dlls.
В папке дистрибутива будет и очень много сопутствующих отдельных
- вариант разработки в .NET по умолчанию:
dotnet publish \FTPSReportsDownloader.csproj -o Distr
Build a single-file app when NET Desktop runtime required.
Будет один исполняемый файл , но требуется установка .NET -
предпочитаемый мною вариант:
dotnet publish FTPSReportsDownloader\FTPSReportsDownloader.csproj -o Distr -r win-x64 -p:PublishSingleFile=true --no-self-contained
Build a single-file app when no runtime required. Вариант, когда .NET устанавливать не нужно - всё есть в одном большом файле, который можно перенести в закрытую систему, где ничего устанавливать нельзя:
dotnet publish FTPSReportsDownloader\FTPSReportsDownloader.csproj -o Distr -r win-x64 -p:PublishSingleFile=true
Build an app on Windows and transfer binary files to Linux. Вариант, когда папку с файлами, собранную на Windows, можно просто перенести на Linux и там запустить, ничего там не устанавливая:
dotnet publish FTPSReportsDownloader\FTPSReportsDownloader.csproj -o Distr -r linux-x64 --self-contained
Для использования одного/нескольких из этих вариантов можно применять
- он создаст нужный дистрибутив(ы) с архивом исходных файлов
текущей версии.
Исходный код здесь.
Breaking Notes
.NET still supports
because just is marked as obsoleted only!
Requirements / Требования
- .NET 8-9 Runtime
v2.2023
-
Update project to .Net Framework 4.8.
-
Refactor sync alghoritm completely (use new lines in
or download/UpdateHistory.txtbefore files).days -
Change
to write dated logs if specified.<add key="DownloadLog" value="logs\{0:yyyy-MM}\{0:yyyy-MM-dd}.log"/> -
Add checking SIZE of
before new download./UpdateHistory.txt -
Add resume download of
./UpdateHistory.txt -
Add
(optional, default in<add key="DownloadHistory" value="ftp\UpdateHistory.txt"/>).DownloadDirectory -
Add
(optional, default up to 14 days before).<add key="DownloadDays" value="14"/> -
Remove use of
- it is simple to delete few last lines from locallastSync.fileinstead.UpdateHistory.txt
Обновленная логика программы
- Сверить размер файла
на сервере и локально./UpdateHistory.txt - Если есть разница в большую сторону - докачать разницу.
- По списку в этой разнице скачать файлы с отчетами.
- Если разница в меньшую сторону или файла нет - скачать его целиком и по нему скачать файлы с отчетами за указанное число последних дней.
- Поэтому в случае любых ошибок с отчетами - надо удалить некоторое число последних строк из файла истории - программа их перекачает.
- Если поврежден файл истории - удалить его.
Исходный код здесь.
Breaking Notes
.NET 6+ does not contain FTP functionality anymore. It has been suggested to use other libraries.
Requirements / Требования
- .Net Framework 4.7.2-4.8
v1.0 (c) MOEX 2016
Из Руководства пользователя "Личного кабинета участника":
Раздел «Отчеты» содержит ссылки на торговые и клиринговые отчеты в подписанном и/или зашифрованном виде. Скачивание отчета возможно осуществить в течение 14 календарных дней с момента размещения ссылки. В правом верхнем углу расположен пример
Инструмента для скачивания отчетов "FTPSReportsDownloader"с FTPS (исходный код программы по скачиванию отчетов возможно дописать с учетом собственных требований).
Ссылка на пример (лицензия MIT) у них устарела. Исходный код здесь.
Requirements / Требования
- .Net Framework 4.5
Versioning / Порядок версий
Номер версии программы указывается по нарастающему принципу:
- Протестированная максимальная версия .NET (9);
- Год текущей разработки (2025);
- Месяц без первого нуля и день редакции (902 - 02.09.2025);
- Номер билда - просто нарастающее число для внутренних отличий. Если настроен сервис AppVeyor, то это его автоинкремент. Или часто просто 0.
Продукт развивается для собственных нужд, а не по коробочной стратегии, и поэтому Breaking Changes могут случаться чаще, чем это принято в SemVer.
License / Лицензия
Licensed under the Apache License, Version 2.0.
Вы можете использовать эти материалы под свою ответственность.