2012-06-03 63 views
0

我有一个TXT文件,我必须FTP它到FTP siteFTP .txt文件到FTP站点使用C#

我无法找到一个完整的教程,可以帮助我编写代码。有人能指点我一个很好的教程,或一些代码开始?

+3

谷歌的第一个结果http://msdn.microsoft.com/en-us/library/ms229715.aspx,你有什么尝试? –

+0

有没有办法让我知道文件是否成功上传? – Illep

+0

更多然后检查它是否存在,如果大小相应,你有几种检查方法是否正确。您可以再次下载并检查它是否具有相同的校验和。 – albertjan

回答

3

This看起来不错。

+0

如何知道文件是否成功上传? – Illep

+0

让我困惑的是为什么设置FTP地址时包含文件名:... WebRequest.Create(“ftp://www.contoso.com/test.htm”)。当我连接到FTP站点时,我不在寻找特定的文件;我想在那里发送一个。那么什么是“test.htm”?这是FTP站点上的文件吗?我发送后会发送的文件是? 我的问题是,当我到达我们去的部分Request.GetRequestStream()时,如果我只是提供我的ftp地址,就会炸毁我:“ftp://127.0.0.1/”,说它无效。如果我提供一个文件名,我会得到一个550错误(文件不可用)。 –

+0

所以我知道地址必须是一个看起来像这样的有效URI(在这里减去多余的空格):“f t p://127.0.0.1/mytestfile.txt”。如果你离开文件名,它会说Uri不适合这种操作。文件名是你想在远端调用它的名字,它基本上设置了传输。我得到的550错误是由于授权问题导致的,无论是在IIS中还是在文件系统级别。我可以通过使用FileZilla FTP客户端访问该站点来找到这些信息,该客户端向您展示了谈话内容,其中包含所有线索。 –

3

正如我在评论中发布的,你可以看到这个link关于如何上传文件到FTP服务器的示例。从链接

代码:

using System; 
using System.IO; 
using System.Net; 
using System.Text; 

namespace Examples.System.Net 
{ 
    public class WebRequestGetExample 
    { 
     public static void Main() 
     { 
      // Get the object used to communicate with the server. 
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm"); 
      request.Method = WebRequestMethods.Ftp.UploadFile; 

      // This example assumes the FTP site uses anonymous logon. 
      request.Credentials = new NetworkCredential ("anonymous","[email protected]"); 

      // Copy the contents of the file to the request stream. 
      StreamReader sourceStream = new StreamReader("testfile.txt"); 
      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(); 
      } 
     } 
    } 
} 

要验证该文件正确上传,您可以检查的响应,它有状态说明和的StatusCode属性。

或者,您可以再次调用FTP服务器,在此设置方法request.Method = WebRequestMethods.Ftp.ListDirectory;。这将返回FTP服务器上的文件列表。

当然,这不会验证文件是否正确上传,只是存在一个同名的文件。

我希望这能回答你的问题。

+0

我可以打印结果到“控制台”('request.Method = WebRequestMethods.Ftp.ListDirectory') – Illep

+0

否方法是请求的属性,当您设置它并获取ResponseStream时,您将得到一个文件名列表。 –

+0

@Illep,看看这个链接http://social.msdn.microsoft。com/Forums/en-US/ncl/thread/079fb811-3c55-4959-85c4-677e4b20bea3它显示如何获取FTP服务器上的文件列表。 –

0

你也可以试试这个代码,也适用于其他文件扩展名。

string ftpUrl = "ftp://server//foldername/fileName.ext"; 
string fileToUploaded = "c:/fileName.ext"; 
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl); 
request.Proxy = new WebProxy(); //-----Proxy bypassing(The requested FTP command is not supported when using HTTP proxy) 
request.Method = WebRequestMethods.Ftp.UploadFile; 
       request.Credentials = new NetworkCredential(ftpUsername, ftpPassword); 
       using (var requestStream = request.GetRequestStream()) 
       { 
        using (var input = File.OpenRead(fileToBeUploaded)) 
        { 
         input.CopyTo(requestStream); 
        } 
       } 

尝试流式传输数据,而不是单独加载到内存中。另外using声明有助于完美地部署资源。