我找到了一个从文件读取的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的大小。我的问题在这里:这个源代码如何工作以及如何解决这个问题。
答案 0 :(得分: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));
答案 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 意味着它是一个文本文件。您可能不会将其视为二进制文件。