2010-09-24 16 views
2

J'utilise l'exemple msdn ici: http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspxPourquoi FileStream alimente-t-il FtpWebRequest mais pas MemoryStream?

J'ai changé le FileStream à un MemoryStream et il ne lit pas les octets

quand je change de nouveau à FileStream il fonctionne très bien.

Une idée?

Merci

 CompressMemoryStream(); 
     Stream requestStream = _request.EndGetRequestStream(ar); 
     const int bufferLength = 2048; 
     byte[] buffer = new byte[bufferLength]; 
     int count = 0; 
     int readBytes = 0; 

     do 
     { 
      //MemoryStream _compressedOutStream 
      //is created/filled by 'CompressMemoryStream()' 
      readBytes = _compressedOutStream.Read(buffer, 0, bufferLength); 
      requestStream.Write(buffer, 0, readBytes); 
      count += readBytes; 
     } 
     while (readBytes != 0); 
     requestStream.Close(); 
     state.Request.BeginGetResponse(
      new AsyncCallback(EndGetResponseCallback), 
      state 
     ); 
+1

Y a-t-il une différence dans la 'Position' lorsque vous lisez dans un flux de mémoire par rapport au flux de fichier? –

Répondre

3

Quelle est la valeur de readBytes sur la première itération dans la boucle? Ma première supposition serait que vous faisiez la même erreur que je fais souvent: écrire dans un flux, puis oublier de revenir au début avant de commencer à lire à partir de celui-ci. Si c'est le cas, alors readBytes sera égal à zéro sur la première (et la seule) boucle d'itération, car vous êtes à la fin du flux - il n'y a rien à lire. Essayez de régler stream.Position = 0 avant de commencer à lire.