Последовательное выполнение потоков - C# (179279)
Формулировка задачи:
Господа, очень нужна ваша помощь, бьюсь уже третий день...
1. Необходимо чтобы сперва выполнялся метод upload, а после него replace. Т.е. переносить файлы только тогда, когда они загружены на ftp-сервер.
2. Если выдает ошибку подключения типа: Timeout occurs или Transfering was timeout, то метод replace вообще не выполняем.
Сейчас делаю так:
Будьте добры, укажите на мою ошибку
Листинг программы
- using BytesRoad.Net.Ftp;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- class sFTP
- {
- Mutex mutex = new Mutex();
- public static void upload()
- {
- try
- {
- sFTP sftp = new sFTP();
- sftp.mutex.WaitOne();
- FtpClient ftp = new FtpClient();
- ftp.PassiveMode = true;
- int TimeOUT = 1000;
- ftp.Connect(TimeOUT, "хост", 21);
- ftp.Login(TimeOUT, @"логин", "пароль");
- var dirLocal = new DirectoryInfo(@"путь");
- foreach (FileInfo file in dirLocal.GetFiles())
- {
- string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName);
- ftp.PutFile(TimeOUT, "путьнафтп" + fileName, @"локальныйпуть" + fileName);
- Console.WriteLine("Файл - " + fileName + " " + "загружен на FTP сервер");
- Thread.Sleep(100);
- }
- ftp.Disconnect(TimeOUT);
- sftp.mutex.ReleaseMutex();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- public static void replace()
- {
- try
- {
- sFTP sftp = new sFTP();
- sftp.mutex.WaitOne();
- var dir = new DirectoryInfo(@"локальныйпуть");
- if (dir.GetFiles().Length > 0)
- {
- foreach (FileInfo file in dir.GetFiles())
- {
- string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName);
- string spath = @"путь" + fileName; //Откуда перемещаем
- string dpath = @"путь" + fileName; //Куда перемещаем
- File.Move(spath, dpath);
- Console.WriteLine("Файл - " + fileName + " " + "перемещен");
- Thread.Sleep(100);
- }
- }
- sftp.mutex.ReleaseMutex();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- try
- {
- Thread upload = new Thread(sFTP.upload);
- Thread replace = new Thread(sFTP.replace);
- upload.Start();
- replace.Start();
- }
- catch (Exception ex)
- {
- Console.WriteLine();
- }
- Console.ReadKey();
- }
- }
Решение задачи: «Последовательное выполнение потоков»
textual
Листинг программы
- static void Main(string[] args)
- {
- var upload = Task.Factory.StartNew(() => {
- upload();
- });
- Task replace = upload.ContinueWith((antecedent) => {
- replace();
- });
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д