title: Downloading files using FtpWebRequest
body: <p>I'm trying to download a file using <code>FtpWebRequest</code>.</p>
  
  <pre><code>private void DownloadFile(string userName, string password, string ftpSourceFilePath, string localDestinationFilePath)
  {
      int bytesRead = 0;
      byte[] buffer = new byte[1024];
  
      FtpWebRequest request = CreateFtpWebRequest(ftpSourceFilePath, userName, password, true);
      request.Method = WebRequestMethods.Ftp.DownloadFile;
  
      Stream reader = request.GetResponse().GetResponseStream();
      BinaryWriter writer = new BinaryWriter(File.Open(localDestinationFilePath, FileMode.CreateNew));
  
      while (true)
      {
          bytesRead = reader.Read(buffer, 0, buffer.Length);
  
          if (bytesRead == 0)
              break;
  
          writer.Write(buffer, 0, bytesRead);
      }        
  }
  </code></pre>
  
  <p>It uses this <code>CreateFtpWebRequest</code> method I created:</p>
  
  <pre><code>private FtpWebRequest CreateFtpWebRequest(string ftpDirectoryPath, string userName, string password, bool keepAlive = false)
  {
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(ftpDirectoryPath));
  
      //Set proxy to null. Under current configuration if this option is not set then the proxy that is used will get an html response from the web content gateway (firewall monitoring system)
      request.Proxy = null;
  
      request.UsePassive = true;
      request.UseBinary = true;
      request.KeepAlive = keepAlive;
  
      request.Credentials = new NetworkCredential(userName, password);
  
      return request;
  }
  </code></pre>
  
  <p>It downloads it. But the information is always corrupted. Anyone know what's going on?</p>