2015-12-20 6 views
1

У меня есть простой метод внутри моей кнопки. Логика позади проста, но я не могу понять, почему я получаю эту ошибку в наборе строк.Необработанное исключение типа «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

Смежные вопросы