在C#中读取文件

时间:2016-09-15 12:25:38

标签: c#

我找到了一个从文件读取的C#源代码,它有1000000个双号。源代码如下。

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索引相关的错误。我逐步调试,结果显示长度= 24000000但savg1 = 1000000的大小。我的问题在这里:这个源代码如何工作以及如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

我建议这样的事情(File.ReadAllBytesBitConverter.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));

答案 1 :(得分: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 意味着它是一个文本文件。您可能不会将其视为二进制文件。