2014-12-28 10 views
2

Im работает на C#, у меня есть 4 файла, как их загрузить сразу? У меня есть это, но это работает только в 1 файле.Загрузить несколько файлов Ftp один раз

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("(secret)/keystock1.txt"); 
request.Method = WebRequestMethods.Ftp.UploadFile; 

// This example assumes the FTP site uses anonymous logon. 
request.Credentials = new NetworkCredential("secret", "secret"); 

// Copy the contents of the file to the request stream. 
StreamReader sourceStream = new StreamReader("keystock1.txt"); 
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
sourceStream.Close(); 
request.ContentLength = fileContents.Length; 

Stream requestStream = request.GetRequestStream(); 
requestStream.Write(fileContents, 0, fileContents.Length); 
requestStream.Close(); 

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

Console.WriteLine("STOCK Upload File Complete, status {0}", response.StatusDescription); 

response.Close(); 
+0

Использование многопоточности, backgroudworker или AsynAwait. –

+0

вы можете поместить свой код в цикл foreach, затем цикл бросил все файлы и выполнил код на них! – SuncoastOwner

ответ

0

Вы можете достичь этого, используя задачи Async. Класс, как бы следующие достижения этой цели:

public class FileUploadsManager 
{ 
    //pass in the list of file paths which u want to upload. 
    public static async void UploadFilesAsync(string[] filePaths) 
    { 
     List<Task> fileUploadingTasks = new List<Task>(); 

     foreach (var filePath in filePaths) 
     { 
      fileUploadingTasks.Add(UploadFileAsync(filePath)); 
     } 

     await Task.WhenAll(fileUploadingTasks); 
    } 

    public static Task UploadFileAsync(string filePath) 
    { 
     return Task.Run(async() => 
     { 
      //this is your code with a few changes 

      FtpWebRequest request = (FtpWebRequest)WebRequest.Create(
        string.Format("(secret)/{0}", Path.GetFileName(filePath)) 
       ); 

      request.Method = WebRequestMethods.Ftp.UploadFile; 

      // This example assumes the FTP site uses anonymous logon. 
      request.Credentials = new NetworkCredential("secret", "secret"); 

      // Copy the contents of the file to the request stream. 
      StreamReader sourceStream = new StreamReader(filePath); 
      byte[] fileContents = Encoding.UTF8.GetBytes(await sourceStream.ReadToEndAsync()); 
      sourceStream.Close(); 
      request.ContentLength = fileContents.Length; 

      Stream requestStream = await request.GetRequestStreamAsync(); 
      requestStream.Write(fileContents, 0, fileContents.Length); 
      requestStream.Close(); 

      FtpWebResponse response = (FtpWebResponse)await request.GetResponseAsync(); 

      Console.WriteLine("STOCK Upload File Complete, status {0}", response.StatusDescription); 

      response.Close(); 
     }); 
    } 
} 

Вы можете назвать это следующим образом:

string[] paths = new string[] { "C:\file1.txt", "C:\file2.txt", "C:\file2.txt" }; 

FileUploadsManager.UploadFilesAsync(paths); 
Смежные вопросы