如何解决“无法读取超出流末尾的错误”错误?

时间:2018-09-25 11:46:46

标签: c#

我收到以下错误:

  

“无法在流的末尾阅读”

我这样写文件:

FileStream path = new FileStream(@"C:\Users\Moosa Raza\Desktop\byte.txt", FileMode.CreateNew); 
BinaryWriter file = new BinaryWriter(path); 
int a = int.Parse(Console.ReadLine()); 
double b = double.Parse(Console.ReadLine()); 
string c = Console.ReadLine(); 

file.Write(b); 
file.Write(c); 
file.Write(a);

输入是a = 12,b = 13和c = raza

然后像这样阅读它:

FileStream path = new FileStream(@"C:\Users\Computer\Desktop\byte.txt", FileMode.Open);
BinaryReader s = new BinaryReader(path);
int a = s.ReadInt32();
double b = s.ReadDouble();
string c = s.ReadString();
Console.WriteLine("int = {0} , double = {1} , string = {2}",a,b,c);
Console.ReadKey();

2 个答案:

答案 0 :(得分:1)

您必须按照完全相同的顺序读取文件。根据您的comment,写顺序为:双精度,字符串,整数。

但是,读取代码以int,double,string的顺序读取。

这会导致读取器读取错误的字节,并将某个值解释为不正确的字符串长度,从而尝试读取文件末尾之外的内容。

确保阅读顺序与书写顺序相同。

答案 1 :(得分:0)

请尝试一下。通过使用“使用”范围,当您完成写入或读取文件时,它将关闭文件。代码也将更加简洁。

        using (var sw = new StreamWriter(@"C:\Users\Computer\Desktop\byte.txt"))
        {
            sw.WriteLine(int.Parse(Console.ReadLine()));
            sw.WriteLine(double.Parse(Console.ReadLine()));
            sw.WriteLine(Console.ReadLine());
        }

        using (var sr = new StreamReader(@"C:\Users\Computer\Desktop\byte.txt"))
        {
           int a =  int.Parse(sr.ReadLine());
           double b =  double.Parse(sr.ReadLine());
           string c =  sr.ReadLine();
        }