2016-09-15 2 views
1

Я нашел исходный код C#, который читается из файла с двойным номером 1000000. Исходный код приведен ниже.Чтение файла в C#

public void filereader() 
{   
    using (BinaryReader b = new BinaryReader(File.Open("C:\\Users\\Hanieh\\Desktop\\nums.txt", FileMode.Open))) 
    { 
     int length = (int)b.BaseStream.Length; 
     byte[] fileBytes = b.ReadBytes(length); 

     for (int ii = 0; ii < fileBytes.Length - 32 ; ii++) 
     { 
      savg1[ii/2] = (double)(BitConverter.ToInt16(fileBytes, ii)/20000.0);// inja error index midee 
      ii++; 
     } 
    } 
} 

Когда я запускаю исходный код для чтения из текстового файла У меня есть ошибка, связанная с индексом savg1, который не связан. Я отлаживаю шаг за шагом, и результат показывает размер length = 24000000, но savg1 = 1000000. мой вопрос здесь: как работает этот исходный код и как я могу исправить эту проблему.

+3

Первого совета: 'File.ReadAllBytes' является более простым способом чтения всех байт в файле ... Теперь мы не можем воспроизведите это, так как вы не показали, как вы объявили или инициализировали 'savg1' ... неясно, что вы подразумеваете под« size length = 24000000, но savg1 = 1000000 »... если вы имеете в виду длину файла 24000000, но размер 'savg' составляет 1000000, тогда это объясняет исключение ... вам нужно инициализировать его до нужного размера, который выглядит как' (fileBytes.Length) - 32/2' –

+0

'fileBytes .Length - 32' почему '-32'? –

+0

'BitConverter.ToInt16' и' double' 16bit & 64bit ... hu? –

ответ

1

я предлагаю что-то вроде этого (File.ReadAllBytes и BitConverter.ToDouble):

byte[] source = File.ReadAllBytes(@"C:\Users\Hanieh\Desktop\nums.txt"); 
    double[] data = new double[source.Length/sizeof(double)]; 

    for (int i = 0; i < data.Length; ++i) 
    data[i] = BitConverter.ToDouble(source, i * sizeof(double)); 
+0

это работает, спасибо –

0

я бы решить это нравится:

double[] data; 

using (BinaryReader b = new BinaryReader(File.Open("C:\\Users\\Hanieh\\Desktop\\nums.txt", FileMode.Open))) 
{ 
    // create array/buffer for the doubles (filelength/bytes per double) 
    data = new double[b.BaseStream.Length/sizeof(double)]; 

    // read the data from the binarystream 
    for (int i = 0; i < data.Length; i++) 
     data[i] = b.ReadDouble(); 
} 

MessageBox.Show("doubles read: " + data.Length.ToString()); 

Хотя файл nums.txt подразумевает, что это текстовый файл. Возможно, вы не прочитали его как двоичный файл.