2011-08-24 100 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