2015-12-20 106 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

相關問題