2017-08-26 14 views
0

私はZipファイルを作成するのにDotNetZipを使い、ftpにアップロードするにはthisを使います。c#:アップロードしたファイルをチェックしてアップロードを続けます

サーバーへの接続が失われた場合に既にアップロードされているファイルをftpサーバーでチェックします。接続が再確立されたら、アップロードプロセスを開始します(最初からではありません)。

public void DoResume(string output,string address, string username,string password) 
    { 
     // create instance of uploading method 
     var ftpClient = new ftp(address, username, password); 
     // get the location of all files in output directory 
     // output is the location of zip files 
     var filesAddress = Directory.GetFiles(output); 
     // get location of all files in output directory 
     // var filesName = Directory.GetFiles(output).select(Path.GetDileName).ToArray(); 
     // get name of uploaded files 
     var getuploadedfiles = ftpClient.directoryListSimple("/"); 
     // Upload Files 
     foreach (var serverfile in getuploadedfiles) 
     { 
      foreach (var fadddress in filesAddress) 
      { 
       var outputfile = Path.GetFileName(fadddress); 
       if (serverfile != outputfile) 
       { 
        // save *fadddress* file as *outputfile* in server 
        ftpClient.upload(outputfile, fadddress); 
       } 

      } 
     } 

これはコードが何をしたとするものである:真は、次のファイルとチェックをスキップする場合チェックは、すでにアップロードされているファイルである。ここ

は、コメントと私のコードですアップロードされていない場合は、このファイルのアップロードを行います。

これはどうなりますか:最初のものを除いてすべてのファイルを再度アップロードします。

答えて

1

このコードは、サーバーをチェックしますいくつかのファイルが以前にアップロードされていない場合、それは、アップロードを継続します:

public void DoResume(string output,string address, string username,string password) 
    { 
     var ftpClient = new ftp(address, username, password); 
     // Get the name of all files in output directory 
     var localfiles = Directory.GetFiles(output).Select(Path.GetFileName).ToArray(); 
     /* Get names of uploaded files */ 
     var getuploadedfiles = ftpClient.directoryListSimple("/"); 
     // Get files those are not uploaded 
     var diff = localfiles.Except(getuploadedfiles); 
     /* Upload Files */ 
     foreach (var dif in diff) 
     { 
      foreach (var file in localfiles) 
      { 
       if (dif != file) continue; 
       var filetoupload = $"{output}{dif}"; 
       ftpClient.upload(file, filetoupload); 
       Console.WriteLine("{0} been uploaded", filetoupload);   
      } 
     } 
    }