2017-02-20 28 views
2

現在、私のアプリのFTPアップロードの部分は次のようになっています。私がしなければならないのは、ファイルをtarget_file_tmp_nameでアップロードし、アップロードが完了したら(または名前を変更する)target_file_nameにファイルをアップロードすることです。アップロードが完了するのを待ってからリモートファイルの名前を変更する方法を理解できません。C#でFTPを使用してファイルを移動する

提案がありますか?

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

@Fildorは名前を付ける前にアップロードを完了するのを待つ必要があります。他の側では、仕事と未完成のアップロードを処理するcronjob – demonoid

+0

ああ、私は参照してください。 FTPリネームに関するStackoverflow Questionsからの答えのいくつかを試しましたか?このようにしてください: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(); 
      ... 
関連する問題