Untitled

                Never    
C#
       
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.IO;


/*
задачи:
коннект к серверу по одной кнопке
дисконнект призакрытии
обход всех папок
*/
namespace WindowsFormsApp8
{
    public partial class Form1 : Form
    {



        public Form1()
        {
            InitializeComponent();
            timer.Interval = 1000;
            timer.Tick += Timer_Tick; 

            string host = textBox2.Text;
            int port = Int32.Parse(textBox3.Text);
            string username = textBox4.Text;
            string password = textBox5.Text;

            client = new SftpClient(host, port, username, password);
            client.Connect();
            timer.Start();
        }

        #region Переменные
        SftpClient client;
        List<string> folderrs = new List<string>();
        List<string> files_uploading = new List<string>();
        Timer timer = new Timer();
        List<string> upl = new List<string>();
        Boolean is_uploading = false;
        #endregion


     //получениt списка файлов с датой модификации, с сервера
     public List<Tuple<string, DateTime>> Getlistdtr_files(string path)
        {
            //получить список файлов 
            List<string> Files = client.ListDirectory(path).Where(f => !f.IsDirectory).Select(f => f.Name).ToList();

            //создать список файлов с датой их последней модификации
            List<Tuple<string, DateTime>> Filesdata = new List<Tuple<string, DateTime>>();
            foreach (string file in Files)
            {
                Renci.SshNet.Sftp.SftpFileAttributes fileAttrs = client.GetAttributes(path + "/" + file);
                DateTime LastWriteTime = fileAttrs.LastWriteTime;
                Filesdata.Add(new Tuple<string, DateTime>(file, LastWriteTime));
            }
            return Filesdata;
        }

        //получениt списка папок, с сервера
        public List<string> Getlistdtr_folders(string path)
        {
            //получить список папок
            List<string> Directories = client.ListDirectory(path).Where(f => f.IsDirectory).Select(f => f.Name).ToList();
            return Directories;

        }



        public void OnStatusUpdate(ulong bytesWritten)
        {
            Console.WriteLine(bytesWritten);
        }


        //загрузка файла на сервер
        public void Uploader(List<string> FilesToUpload, string remote_path)
        {

            foreach (var fileName in FilesToUpload)
            {

                if (!IsUp(fileName))
                {
                    upl.Add(DateTimeFile(fileName));
                    Console.WriteLine("upload" + fileName);
                    using (var file = File.OpenRead(fileName))
                    {
                        client.ChangeDirectory(remote_path);
                        string filename = Path.GetFileName(fileName);
                        client.UploadFile(file, filename, OnStatusUpdate);
                    }
                }

            }

        }

        //вывод файлов и папок с сервера
        void show_remote_files()
        {

            string path = textBox1.Text;

            //запрос списка файлов с датами
            List<Tuple<string, DateTime>> files = Getlistdtr_files(path);
            string feed = "";
            foreach (var file in files)
            {
                feed += file.Item1 + file.Item2.ToString("dd:MM:yy - HH:mm:ss") + "\n";
            }
            richTextBox2.Text = feed;

            //запрос списка  папок
            List<string> folders = Getlistdtr_folders(path);
            richTextBox1.Text = String.Join("\n", folders.ToArray());
        }

        //вывод файлов и папок с компьютера
        void show_local_files()
        {
            string path = textBox6.Text;
            //формирование списка файлов с датами
            string[] fileEntries = Directory.GetFiles(path);

            List<Tuple<string, DateTime>> Filesdata = new List<Tuple<string, DateTime>>();
            foreach (string file in fileEntries)
            {
                DateTime lastWriteTime = File.GetLastWriteTime(file).ToLocalTime();
                Filesdata.Add(new Tuple<string, DateTime>(file, lastWriteTime));
            }
            string feed = "";
            foreach (var file in Filesdata)
            {
                feed += file.Item1 + file.Item2.ToString("dd:MM:yy - HH:mm:ss") + "\n";
            }
            richTextBox3.Text = feed;

            //формирование списка папок

            string[] subdirectoryEntries = Directory.GetDirectories(path);
            richTextBox4.Text = String.Join("\n", subdirectoryEntries.ToArray());
        }

        string DateTimeFile(string path)
        {
            DateTime lastWriteTime = File.GetLastWriteTime(path).ToLocalTime();
            return path + lastWriteTime.ToString("dd.MM.yyyy-HH:mm:ss");
        }


        bool IsUp(string path)
        {
            string c = DateTimeFile(path);

            foreach (var item in upl)
            {
                if (c == item) return true;
            }

            return false;
        }


        #region Кнопочки


        //коннект
        private void button1_Click(object sender, EventArgs e)
        {

            string host = textBox2.Text;
            int port = Int32.Parse(textBox3.Text);
            string username = textBox4.Text;
            string password = textBox5.Text;

            client = new SftpClient(host, port, username, password);
            client.Connect();

        }

        //запуск таймера
        private void start_timer_Click(object sender, EventArgs e)
        {
            timer.Start();
        }

        //обновление информации о файлах
        private void button2_Click(object sender, EventArgs e)
        {
            show_remote_files();
            show_local_files();
        }


        private void Timer_Tick(object sender, EventArgs e)
        {
            //получение списка серверных файлов
            string host = textBox2.Text;
            int port = Int32.Parse(textBox3.Text);
            string username = textBox4.Text;
            string password = textBox5.Text;
            string remote_folder_path = textBox1.Text;

            List<Tuple<string, DateTime>> remote_files = Getlistdtr_files(remote_folder_path);

            //получение списка локальных файлов
            string local_path = textBox6.Text;
            string[] fileEntries = Directory.GetFiles(local_path);

            List<Tuple<string, DateTime>> local_files = new List<Tuple<string, DateTime>>();
            foreach (string file in fileEntries)
            {
                DateTime lastWriteTime = File.GetLastWriteTime(file).ToLocalTime();
                local_files.Add(new Tuple<string, DateTime>(file, lastWriteTime));
            }

            List<string> files_for_upload = new List<string>();

            foreach (var local_file in local_files)
            {
                bool file_not_exist = true;

                foreach (var remote_file in remote_files)
                {

                    //сравнение имен файлов
                    string r_name = remote_file.Item1;
                    string l_name = (local_file.Item1).Split('\\').Last();


                    if (l_name == r_name)
                    {

                        //если файл сущетвует - меняется флаг
                        file_not_exist = false;

                        //сравнение времени изменения
                        if (local_file.Item2 > remote_file.Item2)
                        {
                            files_for_upload.Add(local_file.Item1);
                        }
                    }
                }

                if (file_not_exist)
                {
                    files_for_upload.Add(local_file.Item1);
                }


            }
            if (files_for_upload.Count > 0)
            {


                Uploader(files_for_upload, remote_folder_path);
            }
        }

        #endregion

        private void timer1_Tick(object sender, EventArgs e)
        {
            show_remote_files();
            show_local_files();
        }
    }
}

Raw Text