Impossible de lire au-delà de la fin du flux
J'ai fait de la méthode rapide pour écrire un fichier à partir d'un flux, mais c'est pas encore fait. Je reçois cette exception et je ne trouve pas pourquoi:
Unable to read beyond the end of the stream
Est-il quelqu'un qui pourrait m'aider à le corriger?
public static bool WriteFileFromStream(Stream stream, string toFile)
{
FileStream fileToSave = new FileStream(toFile, FileMode.Create);
BinaryWriter binaryWriter = new BinaryWriter(fileToSave);
using (BinaryReader binaryReader = new BinaryReader(stream))
{
int pos = 0;
int length = (int)stream.Length;
while (pos < length)
{
int readInteger = binaryReader.ReadInt32();
binaryWriter.Write(readInteger);
pos += sizeof(int);
}
}
return true;
}
Merci beaucoup!
Vous devez vous connecter pour publier un commentaire.
Pas vraiment une réponse à votre question, mais cette méthode pourrait être tellement plus simple comme ceci:
Noter que j'ai également supprimé la valeur de retour depuis à peu près inutile, puisque dans votre code, il est à seulement 1 instruction de retour
En dehors de cela, vous effectuez un contrôle de la Longueur sur le flux, mais de nombreux cours d'eau dont le soutien vérification de la Longueur.
Comme pour votre problème, vous devez d'abord vérifier si le flux est à sa fin. Si non, vous avez bien lu 4 octets. Là est le problème. Disons que vous avez un flux d'entrée de 6 octets. D'abord vérifier si le flux est à sa fin. La réponse est non puisque il y a 6 octets. Vous lisez 4 octets et vérifier de nouveau. Bien sûr, la réponse est encore non puisqu'il y a 2 octets. Maintenant vous lire un autre de 4 octets, mais qui bien sûr ne parvient pas puisqu'il y a seulement 2 octets. (readInt32 lit les 4 octets).
Je suppose que le flux d'entrée ont ints seulement (Int32). Vous avez besoin de tester l'
PeekChar()
méthode,PeekChar
économisez de la Position actuelle à partir du flux principal, lire un int, et de nouveau mis en position!Vous êtes en train de faire alors (pos < la longueur) et la longueur est la longueur réelle du flux en octets. Si vous êtes effectivement compter les octets dans le flux et ensuite d'essayer de lire que le plus grand nombre d'entiers (ce qui est incorrect). Vous pourriez prendre de la longueur à flot.Longueur /4 depuis un Int32 est de 4 octets.
essayer
Après la lecture du flux par le binaire lecteur de la position du flux est à la fin, vous devez définir la position à zéro "flux".position=0;"