2009-10-13 7 views
4

Je me demandais si quelqu'un connaît la réponse à pourquoi mon code jette un exeption quand je fais le fileStream.Read appel, avec le message « Le flux est disposé »FtpWebRequest dit flux est Disposé

Je liste les fichiers dans le dossier et en utilisant mon navigateur pour le fichier URL fonctionne très bien. Aucun mandataire n'est impliqué. UnifiedFile est juste une sous-classe de VirtualFile qui vient du CMS avec lequel je travaille. (C'est une image que je suis en train de télécharger)

FtpWebRequest fileRequest = (FtpWebRequest)FtpWebRequest.Create(fileUrl); 
fileRequest.Method = WebRequestMethods.Ftp.DownloadFile; 
fileRequest.Credentials = credentials; 
fileRequest.EnableSsl = this.EnableSsl; 
fileRequest.UseBinary = true; 
fileRequest.UsePassive = true; 
fileRequest.KeepAlive = true; 
fileRequest.Proxy = null; 

using (FtpWebResponse fileResponse = (FtpWebResponse)fileRequest.GetResponse()) 
{ 
    using (Stream fileStream = response.GetResponseStream()) 
    { 
     UnifiedFile createdFile = PictureManager.Instance.CreateOriginalFile(name); 
     using (Stream targetStream = createdFile.Open(FileMode.OpenOrCreate)) 
     { 
      byte[] buffer = new byte[2048]; 

      // Read the file 
      while (true) 
      { 
       int bytesRead = fileStream.Read(buffer, 0, buffer.Length); 
       // Reached end of stream, close 
       if (bytesRead == 0) 
        break; 

       targetStream.Write(buffer, 0, bytesRead); 
       } 

     } 
    } 

}

Edit: trouvé le bogue; le "GetResponseStream" est fait à la demande précédente et donc à la mauvaise demande. doh

Merci les gars pour le ;-) « Granny help » (expression suédoise donc je ne sais pas si elle applique vraiment en anglais)

+0

while (true) ??? –

+0

ahh, je vois la pause. –

+0

On dirait que vous avez un refactoring à faire,;) – AnthonyWJones

Répondre

3

Vous devriez vérifier la réponse StatusCode avant de poursuivre. Je soupçonne que la demande a échoué, donc il n'y a pas de corps de réponse.

+0

StatusCode was = "DataAlreadyOpen" – ullmark

+0

Et le message d'exception exacte est: "Impossible d'accéder à un objet disposé. nom: 'System.Net.Sockets.NetworkStream' " – ullmark

Questions connexes