Проверка версии обновления и скачивание файлов по FTP C#

Алгоритм действий:

  1. Проверить версию файлов на FTP и сверить версию файлов на локальной машине пользователя. (Возможно путём XML или Hash)
  2. Если версия на FTP новее, чем на локальной машине пользователя - скачать обновленные файлы (файлы, которые имеют более свежую дату изменения)
  3. Если данных файлов нет на машине пользователя - скачать все существующие файлы из директории FTP и залить в папку, указанную пользователем.

Вот как реализовал частично это я (проверка на существование нужных файлов и директорий):

private void labelAccept_MouseDown_1(object sender, MouseButtonEventArgs e)
        {
            try
            {
                RegistryKey key = Registry.CurrentUser.CreateSubKey("SOFTWARE\\SAMP");
                key.SetValue(reg_pName, $"{textBoxPlayerName.Text}");

                // проверка на существующую директорию
                string currentDirectory = @"" + txtBoxPath.Text;
                if (Directory.Exists(currentDirectory))
                {
                    key.SetValue("gta_sa_exe", $"{txtBoxPath.Text}");                                   // path to game
                    MessageBox.Show("Путь к игре сохранен успешно!");

                }
                else if (!Directory.Exists(currentDirectory))
                    MessageBox.Show("Директория указана неверно, либо не существует!");
                else
                    MessageBox.Show("Файл gta_sa.exe не найден!");

                // сохранение состояний чек боксов
                // здесь
            }

Функция, которая устанавливает файлы с FTP, если нужные файлы не обнаружены (некорректно выводит размер файла):
 private void get_install()
        {
            string ftp_login = "hidden";
            string ftp_pass = "hidden";

            // ftp
            const string url = "ftp://hidden/Game.zip";
            // exception
            try
            {
                NetworkCredential _credentials = new NetworkCredential(ftp_login, ftp_pass);
                // проверить подключение *удачно или нет*
                // не знаю как, может сам найду, но буду благодарен за помощь


                // запрос на размер загружаемых файлов с FTP
                // Query size of the file to be downloaded
                WebRequest sizeRequest = WebRequest.Create(url);
                sizeRequest.Credentials = _credentials;
                sizeRequest.Method = WebRequestMethods.Ftp.GetFileSize;
                int size = (int)sizeRequest.GetResponse().ContentLength;
                MessageBox.Show(size.ToString());


// загрузка 
                WebRequest request = WebRequest.Create(url);
                request.Credentials = _credentials;
                request.Method = WebRequestMethods.Ftp.DownloadFile;

                Settings st = new Settings();

                using (Stream ftpStream = request.GetResponse().GetResponseStream())
                using (Stream fileStream = File.Create(@"" + st.txtBoxPath.Text))
                {
                    byte[] buffer = new byte[10240];
                    int read;

                    // попытка реализовать прогресс бар, который будет показывать прогресс загрузки
                    while ((read = ftpStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fileStream.Write(buffer, 0, read);
                        int position = (int)fileStream.Position;
                        //ProgressBar1_Copy4.Invoke((MethodInvoker)(() => progressBar1.Value = position));      // .Net ругает, возможно из-за WPF
                    }
                }
            }
            catch (Exception) { }

Согласен, очень косячный код, впервые сталкиваюсь с таким огромным фронтом работы, тем не менее, средствами поисковых систем, навыков чтения документации, что-то удалось вывести.

И еще момент, нужно чтобы скачивались файлы в том случае, если их версия новее версии, которая лежит у пользователя на ПК. Я пытался сделать через File.Version, по-моему так, но в FTP не прокатывало, она все равно продолжала записывать все файлы на пользовательскую машину. А нужно конкретно те, которые новее или же, если некоторые файлы отсутствует - докачать их.


Ответы (0 шт):