2013-05-30 1 views
1

Я новичок в FTP. Я пытаюсь записать файл в FTP с помощью StreamWriter.Once после записи в файл , я не хочу закрывать поток, так как у меня есть какая-то работа, которая должна быть выполнена. Через несколько часов, если я попытаюсь написать, используя тот же streamWriter, я получаю вышеуказанную ошибку. Ниже мой фрагмент кодаFTP: не удалось записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хостом

public void WriteToFTP() 
    { 
     bool isConnectionEstablished = false; 
     StreamWriter stream = null; 
     try 
     { 
      for (int i = 1; i < 5; i++) 
      { 
       string message = string.Format("File - {0}.", i.ToString()); 
       if (!isConnectionEstablished) 
       { 
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("My FTP path")); 
        request.Credentials = new NetworkCredential("asdf", "[email protected]"); 
        request.Proxy = null; 
        request.UseBinary = true; 
        request.ConnectionGroupName = string.Empty; 
        request.UsePassive = true; 
        request.EnableSsl = false; 
        isConnectionEstablished = true; 
        stream = new StreamWriter(request.GetRequestStream()) { AutoFlush = true }; 
       } 
       stream.WriteLine(message);//Here i am getting the error for the i = 2(after doing my work) 
       //Doing work which may take more than 1 hour. 
      } 
     } 
     catch (Exception exe) 
     { 
      //The Error "Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host" is being caught here. 
     } 
     finally 
     { 
      if (stream != null) 
       stream.Close(); 
     } 
    } 

ответ

0

вы должны установить timout на бесконечность, -1 это значение бесконечности см этот пример:

FtpWebRequest reqFTP; 

    string fileName = @"c:\downloadDir\localFileName.txt"; 
    FileInfo downloadFile = new FileInfo(fileName); 
    string uri = "ftp://ftp.myftpsite.com/ftpDir/remoteFileName.txt"; 


    FileStream outputStream = new FileStream(fileName, FileMode.Append); 

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); 
    reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
    reqFTP.UseBinary = true; 
    reqFTP.KeepAlive = false; 
    reqFTP.Timeout = -1; 
    reqFTP.UsePassive = true; 
    reqFTP.Credentials = new NetworkCredential("userName", "passWord"); 
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 
    Stream ftpStream = response.GetResponseStream(); 
    long cl = response.ContentLength; 
    int bufferSize = 2048; 
    int readCount; 
    byte[] buffer = new byte[bufferSize]; 
    readCount = ftpStream.Read(buffer, 0, bufferSize); 
    Console.WriteLine("Connected: Downloading File"); 
    while (readCount > 0) 
    { 
     outputStream.Write(buffer, 0, readCount); 
     readCount = ftpStream.Read(buffer, 0, bufferSize); 
     Console.WriteLine(readCount.ToString()); 
    } 

    ftpStream.Close(); 
    outputStream.Close(); 
    response.Close(); 
    Console.WriteLine("Downloading Complete"); 
+0

Его, кажется, что значение по умолчанию infinate !!! – Venkatesh