title: FtpWebRequest returns "The remote server returned an error: (530) Not logged in"
body: <p>I get this error "The remote server returned an error: (530) Not logged in." while uploading the file using FtpWebRequest.<br /></p>
  
  <ol>
  <li>Error occurs only when I transfer the files to path having subfolders, otherwise it perfectly works fine.<br/></li>
  <li><p>Uploading large files about 5 to 10 MB, it gets timed out.</p>
  
  <pre><code>void FtpTransfer(string siteName, string portNumber, string ftpUser, string ftpPassword, string destPath)
  {
      FtpWebRequest request;
      DateTime now = DateTime.Now;
      string now_string =
          (now.Year).ToString()
          + "_" +
          (now.Month).ToString("0#")
          + "_" +
          (now.Day).ToString("0#");
  
      foreach (object item in listBox1.Items)
      {
          string srcFile = item.ToString();
          lblSource.Text = srcFile;
          Uri uri = new Uri(srcFile);
          string destFile = srcFile.Replace(lblPath.Text, "").Replace("\\\\", "\\").Replace("\\", "/").Replace("www/","");
  
          Configuration oConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
          int timeout = int.Parse(oConfig.AppSettings.Settings["TimeOut"].Value);
  
          if (siteName == "mysite1.co.in" || siteName == "sd1.mysite2.net")
              destFile = "ftp://" + siteName + ":" + portNumber + "/" + siteName + "/_test" + destFile; //error here
          else
              destFile = "ftp://" + siteName + ":" + portNumber + "/" + siteName + destFile; //no error
          lblDestn.Text = destFile;
  
          request = (FtpWebRequest)WebRequest.Create(destFile);
          request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
          request.Timeout = 6000;
          request.Method = WebRequestMethods.Ftp.UploadFile;
          request.UsePassive = true;
          request.UseBinary = true;
          request.KeepAlive = true;
  
          // Copy the contents of the file to the request stream.
          StreamReader sourceStream = new StreamReader(@srcFile);
          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();
  
          string path = System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
          System.IO.StreamWriter w = System.IO.File.AppendText(path + "\\log_" + now_string + ".txt");
          w.WriteLine(DateTime.Now.ToString("yyy-MM-dd HH:mm:ss")
              + " "
              + srcFile
              + " "
              + destFile
              + " "
              + response.StatusDescription);
  
          w.Close();
  
          response.Close();
      }
  </code></pre></li>
  </ol>