2017-09-08 3 views
2

provoque une exception de débordement lorsque vous essayez d'exécuter une instruction eof dans la boucle while La valeur était trop grand ou trop petit pour un caractèreFileStream débordement Exception

string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt"; 

     FileStream fs = File.Open(filePath, FileMode.Open); 

     char readChar; 
     byte[] b = new byte[1024]; 

     while(fs.Read(b, 0, b.Length) > 0) 
     { 
      readChar = Convert.ToChar(fs.ReadByte()); 
      Console.WriteLine(readChar); 
     } 
+0

https://stackoverflow.com/questions/11985348/read-and-output-a-text-file-using-streamreader-char-by-char –

Répondre

1

D'abord, vous lisez 1024 octets du fichier (cela peut être vous atteignez la fin du fichier) alors vous essayez de lire l'octet suivant qui dans ce cas retournerait -1 et ne peut pas être converti en char. Pourquoi voudriez-vous lire le premier octet 1024? Essayez de lire 1 octet à chaque fois:

string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt"; 
FileStream fs = File.Open(filePath, FileMode.Open); 
int val; 
while((val = fs.ReadByte()) > 0) 
{ 
    readChar = Convert.ToChar(val); 
    Console.WriteLine(readChar); 
} 

et vous aurez pas besoin byte[] b = new byte[1024];

+0

Merci, je vois l'erreur que j'ai commise maintenant. Merci d'avoir clarifié ma bienveillance :). – ThatOneCoderDude

+0

Vous êtes les bienvenus –

0

Vous appelez fs.ReadByte() sans d'abord vérifier que fs a encore un octet gauche. Parce que vous appelez while(fs.Read(b, 0, b.Length) > 0) vous allez probablement vider fs dans b, puis appelez fs.ReadByte() entraînant votre erreur.

Essayez quelque chose comme:

string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt"; 

FileStream fs = File.Open(filePath, FileMode.Open); 

for (int i = 0; i < fs.Length; i++) 
{ 
    char readChar = Convert.ToChar(fs.ReadByte()); 
    Console.WriteLine(readChar); 
} 

Essayez de lire également la documentation ReadByte.