2011-08-24 59 views
0

這看起來像一個微不足道的問題,但我的網絡搜索答案(甚至在本網站上)迫使我明確提出問題。問題當文件不存在於FTP服務器上時,使用FtpWebRequest通過FTP上傳文件

我通過FTP從我的服務器上傳文件到遠程服務器。我的代碼看起來像這樣...

public void Upload(string fileToUpload) 
    { 
     // Get the object used to communicate with the server. 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.remoteserver.com/Data/" + fileToUpload); 
     request.UsePassive = false; 
     request.UseBinary = true; 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.Credentials = new NetworkCredential ("username","password"); 

     // Copy the contents of the file to the request stream. 
     StreamReader sourceStream = new StreamReader(fileToUpload); 
     byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
     sourceStream.Close(); 
     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

     Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription); 

     response.Close(); 
    } 

這一切似乎都非常直截了當。我遇到的問題是當文件不存在於遠程服務器上時出現550錯誤。我會假設如果文件存在,那麼文件就會被創建。此外,我認爲如果它確實會被覆蓋。因爲事實並非如此(至少在編寫一個新文件時),我會進一步假設我應該(a)以某種方式首先檢查文件,並且(b)如果文件不存在,則創建該文件。但如何做到這一點?

感謝,

邁克

+0

您是否檢查過該帳戶是否有權在FTP服務器上創建文件? – JNappi

+0

你是在傳遞'fileToUpload',你傳遞了一個絕對文件路徑,比如'c:\ File.txt'或者只是一個像'File.txt'這樣的文件名?另外,你是否明白你的程序只適用於文本文件,對吧? –

+0

@Japp:這不是一個權限問題,因爲FTP憑證是針對具有寫入權限的用戶(我控制兩臺服務器,因此可以確認這一點)。 – mikerennick

回答

0

(註釋轉換爲回答)

你在突入fileToUpload,爲c:\File.txt或者僅僅是想File.txt文件名絕對文件路徑等?另外,你是否明白你的程序只適用於文本文件,對吧?

+0

謝謝......不敢相信我來這裏調試一個參數:)......但是非常感謝。 – mikerennick