2016-09-15 3 views
1

Ich habe einen C# Quellcode gefunden, der aus einer Datei gelesen hat, die 1000000 double number hat. Der Quellcode ist unten.Datei lesen in 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++; 
     } 
    } 
} 

Wenn ich Quellcode zum Lesen von Textdatei ausführen, habe ich einen Fehler, der savg1-Index, der außerhalb der Grenze ist. Ich debugge Schritt für Schritt und Ergebnis zeigt Größe der Länge = 24000000, aber savg1 = 1000000. meine Frage ist hier: wie dieser Quellcode funktioniert und wie ich dieses Problem beheben kann.

+3

Erster Tipp: 'File.ReadAllBytes' ist ein einfacher Weg, um alle Bytes in einer Datei zu lesen ... Jetzt können wir nicht reproduzieren Sie dies, weil Sie nicht gezeigt haben, wie Sie 'savg1' deklariert oder initialisiert haben ... es ist nicht klar, was Sie mit" Länge der Größe = 24000000, aber savg1 = 1000000 "meinen ... wenn Sie die Länge der Datei meinen ist 24000000 aber die Größe von 'savg' ist 1000000 dann erklärt das die Ausnahme ... Sie müssen es auf die richtige Größe initialisieren, die aussieht wie es sein muss' (fileBytes.Length) - 32/2' –

+0

'fileBytes .Länge - 32' warum '-32'? –

+0

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

Antwort

1

Ich schlage vor, so etwas wie dieses (File.ReadAllBytes und 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

es funktioniert, danke –

0

Ich würde es lösen mag:

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()); 

Obwohl die Dateien nums.txt bedeutet, dass es sich um eine Textdatei ist. Sie könnten es nicht als Binärdatei lesen.