2017-07-28 46 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.

我不知道發生了什麼,什麼不是。可以使用一些援助。

謝謝。

編輯:當我這樣做: String ftpurl = @「ftp://xx.xxx.xxx.xxx/」+「trial」;

它不會建立一個目錄。我只是創建一個名爲「試用」的文件。

在做這些:

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

給出了同樣的錯誤553

+0

您設置了'ftp.Method'兩次。因此第一個分配從未被使用。這不起作用,你需要將你的代碼分成兩個請求。 – NtFreX

+0

我已更新我的問題。請看看這個。 – Xonshiz

回答

0

您將有單獨的代碼分成兩個請求。第一個應該創建目錄,第二個應該上傳文件。

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