2015-12-20 98 views
1

我在按钮内部有一个简单的方法。背后的逻辑很简单,但我无法理解为什么我在String集上收到这个错误。'System.FormatException'类型的未处理的异常

以下是错误

型“System.FormatException”未处理的异常出现在mscorlib.dll

附加信息:在什么应该是一个7位编码的Int32字节太多。

下面是代码

private void button1_Click(object sender, EventArgs e) 
    { 
     FileStream data= new FileStream("data.DAT", FileMode.OpenOrCreate); 
     BinaryReader a = new BinaryReader(data); 
     while (data.Position < data.Length) 
     { 
      string name = a.ReadString(); 
      string egn = a.ReadString(); 
      string lenght = a.ReadString(); 
      int hour = a.ReadInt32(); 
      double price = a.ReadDouble(); 
      int days = a.ReadInt32(); 
      double result = price* hour* days; 
      dataGridView1.Rows.Add(name, egn, lenght, hour, price, days, result); 
     } 
     data.Close(); 
    } 
+0

究竟哪一行?你可以发布data.dat的十六进制转储吗? – Chet

+0

可能数据并不完全包含您的想法。该文件如何写入?你能告诉我们用来写它的代码吗? –

+0

我无法显示用于编写.dat文件的代码。但肯定它不是由BrinaryWriter生产的,可能会导致这个问题?附:错误行是while循环中的第一个。 – dtmnn

回答

2

没有看到确切的数据很难说,但我怀疑你滥用BinaryReader在。例如,ReadString方法假定要读取的字符串以特定格式的长度作为前缀。

https://msdn.microsoft.com/en-us/library/system.io.binaryreader.readstring(v=vs.110).aspx

基本上,BinaryReader在被设计从通过的BinaryWriter,而不是一些任意的二进制文件产生的文件中读取。

+0

数据文件不是由BinaryWriter写的,但是因为我不知道这可能会导致我用它的BinaryReader出现问题。非常感谢! – dtmnn

+0

就像我记得的那样,它对所有其他数据类型仍然有用。只有字符串以不寻常的方式编码。 – Chet

相关问题