J'essaie de lire le flux de réponse d'un objet HttpWebResponse. Je connais la longueur du flux (_response.ContentLength) mais je continue à obtenir l'exception suivante:ArgumentOutOfRangeException lors de la lecture d'octets à partir du flux
L'argument spécifié était hors de la plage de valeurs valides. Nom du paramètre: Taille
Bien que le débogage, j'ai remarqué que, au moment de l'erreur, les valeurs sont en tant que telles:
longueur = 15032 // la longueur du cours d'eau tel que défini par _response.ContentLength
bytesToRead = 7680 // le nombre d'octets dans le flux qui doivent encore être lu
bytesRead = 7680 // le nombre d'octets qui ont été lus (offset)
body.length = 15032// La taille de l'octet [] le flux est copié à
La chose particulière est que les variables bytesToRead et bytesRead sont TOUJOURS 7680, quelle que soit la taille du flux (contenue dans la variable length). Des idées?
code:
int length = (int)_response.ContentLength;
byte[] body = null;
if (length > 0)
{
int bytesToRead = length;
int bytesRead = 0;
try
{
body = new byte[length];
using (Stream stream = _response.GetResponseStream())
{
while (bytesToRead > 0)
{
// Read may return anything from 0 to length.
int n = stream.Read(body, bytesRead, length);
// The end of the file is reached.
if (n == 0)
break;
bytesRead += n;
bytesToRead -= n;
}
stream.Close();
}
}
catch (Exception exception)
{
throw;
}
}
else
{
body = new byte[0];
}
_responseBody = body;
Vous, monsieur, êtes un génie. Comment pourrais-je remédier au deuxième problème (le remplissage du flux est plus lent que je ne le lis)? La définition de bytesToRead = length ne permettrait-elle pas de lire tous les octets du flux? – user345194