2017-02-20 18 views
2

В настоящее время часть загрузки FTP для моего приложения выглядит ниже. Мне нужно сделать, чтобы загрузить файл с target_file_tmp_name и при загрузке заканчивается, чтобы переместить его (или переименовать) на target_file_name. Не могу понять, как ждать завершения загрузки, а затем переименовать удаленный файл.Перемещение файла с использованием FTP в C#

Любые предложения?

var result_file_name = root_dir + "\\" + file_name + ".eps"; 
System.Uri target_file_name = new Uri(ftp_path + "/" + file_name + ".eps"); 
System.Uri target_file_tmp_name = new Uri(ftp_path + "/" + file_name + ".tmp"); 

await WhenFileCreated(result_file_name); 
if (File.Exists(result_file_name)) 
{ 
    SetProgressText("Uploading to server..."); 
    WebClient wc_uploader = new WebClient(); 

    wc_uploader.Credentials = new NetworkCredential("user", "pass"); 
    wc_uploader.UploadFileCompleted += FinishProcess; 
    wc_uploader.UploadFileAsync(target_file_tmp_name, "STOR", result_file_name); 

} 
+0

Кажется, как будто вы загружаете его на нужное имя цели напрямую? Что в этом плохого? – Fildor

+0

@Фильдору нужно дождаться завершения загрузки, прежде чем дать ему имя. На другой стороне cronjob работает и обрабатывает незавершенные загрузки также – demonoid

+0

А, я вижу. Пробовали ли вы некоторые ответы на вопросы Stackoverflow относительно переименования FTP? Как и этот: http://stackoverflow.com/a/13026258/982149 Я думаю, вам нужно будет начать переименование в обработчике событий FinishProcess и, конечно же, сначала использовать команду target_file_tmp_name для вашей команды STORE. – Fildor

ответ

2

Ваш FinishProcess должен выглядеть код ниже:

private void FinishProcess(object sender, System.EventArgs e) 
     { 
      var requestFTP = (FtpWebRequest)FtpWebRequest.Create(target_file_tmp_name); 
      requestFTP.Proxy = null; 
      requestFTP.Credentials = new NetworkCredential(ftp_login, ftp_pass); 
      requestFTP.Method = WebRequestMethods.Ftp.Rename; 
      requestFTP.RenameTo = file_name + ".eps"; 
      requestFTP.GetResponse(); 
      ...