2017-07-28 32 views
-1

私が作成した単純なC#Windowsアプリケーションを使用してFTPサーバー(EC2)にファイルをアップロードしようとしていました。FTP(C#)で新しいディレクトリを作成できません

問題ディレクトリがすでに存在する場合は、そのディレクトリ内にファイルを作成できます。ただし、ディレクトリが存在しない場合は、ディレクトリを作成できません。

私がチェックしたもの:書き込み権限を二重に確認しました。私はWinSCP経由でログインしました。問題なく、そこに新しいディレクトリを作成できます。私はユーザー特権を与えました。

マイコード:

private async void FileFTPUpload(string sourcefilepath, string folderPath) { 
String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/12/1.txt"; 
Console.WriteLine("Ftp url : " + ftpurl); 
String ftpusername = "myUserName"; 
String ftppassword = "myPassword"; 

try { 
    string filename = Path.GetFileName(sourcefilepath); 
    string ftpfullpath = ftpurl; 
    WebRequest ftp = WebRequest.Create(ftpurl); 
    ftp.Method = WebRequestMethods.Ftp.MakeDirectory; 
    ftp.Credentials = new NetworkCredential(ftpusername, ftppassword); 

    ftp.Method = WebRequestMethods.Ftp.UploadFile; 

    FileStream fs = File.OpenRead(sourcefilepath); 
    byte[] buffer = new byte[fs.Length]; 
    fs.Read(buffer, 0, buffer.Length); 
    fs.Close(); 

    Stream ftpstream = ftp.GetRequestStream(); 
    ftpstream.Write(buffer, 0, buffer.Length); 
    ftpstream.Close(); 
} catch (Exception ex) { 
    Console.WriteLine("Exception Occurred : " + ex); 
    //throw ex; 
} 
} 

、 "裁判/ 12 /" は、その後1.TXTが行われます、存在している場合。そうしないと、私はエラーを取得する:

System.Net.WebException: The remote server returned an error: (553) File name not allowed.

私が起こって、何ではない何か分かりません。いくつかの援助を使うことができました。

ありがとうございます。

編集:これを行うとき: 文字列ftpurl = @ "ftp://xx.xxx.xxx.xxx/" + "trial";

ディレクトリを作成しません。私はちょうど "試練"という名前のファイルを作成します。これを行う

String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/"; 

は553

+0

「ftp.Method」を2回設定しました。したがって、最初の義務は決して使用されません。これはあなたのコードを2つの要求に分ける必要があります。 – NtFreX

+0

質問を更新しました。それも見てください。 – Xonshiz

答えて

0

あなたは2つの要求にコードを区切る必要があります同じエラーことを提供します。最初はディレクトリを作成し、2番目はファイルをアップロードする必要があります。

var filePath = @"ftp://xx.xxx.xxx.xxx/trial/12/1.txt"; 
var credentials = new NetworkCredential(ftpusername, ftppassword); 

{ 
    // create directory 
    var directoryPath = Path.GetDirectoryName(filePath); 
    var request = WebRequest.Create(directoryPath); 
    request.Method = WebRequestMethods.Ftp.MakeDirectory; 
    request.Credentials = credentials; 
    using(var response = (FtpWebResponse)requestDir.GetResponse()) 
    { 
     // TODO: handle errors 
    } 
} 

{ 
    // upload file 
    using (WebClient client = new WebClient()) 
    { 
     client.Credentials = credentials; 
     client.UploadFile(filePath, "STOR", sourcefilepath); 
    } 
} 
+0

ありがとう..それは働いた。ちょうどいくつかを変えなければならなかった。ソースファイルパス。すばらしいです! :) – Xonshiz

関連する問題