C# 无法在流的结尾之外进行读取。。。

部分代码如下,定义的pixel数组大小是[710,610],运行发生错误,调试得到在行增加到355(一半)的时候就提示错误,无法在流的结尾之外进行读取。求指导。。。usi... 部分代码如下,定义的pixel数组大小是[710,610],运行发生错误,调试得到在行增加到355(一半)的时候就提示错误,无法在流的结尾之外进行读取。求指导。。。
using (FileStream fs = new FileStream("LST.dat", FileMode.Open, FileAccess.Read)) { using (BinaryReader px = new BinaryReader(fs)) { for (int row = 0; row < R; row++) for (int col = 0; col < L; col++) { piexl[row, col] = px.ReadDouble(); Console.WriteLine(piexl[row, col]); } } }
展开
 我来答
syht2000
高粉答主

2014-09-06 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部

象你这种无法确认文件大小的,就不要去用按数组的大小去读取文件,否则如果你的lst.dat中没有710*610个数据就必然出错,考虑改成(我不清楚你原本的piexl数组是否一定是固定的710x610还是说随着dat中的数据数量变动的,如果是变动的,那就是下面的)

//代码未经测试
List<List<double>> piexl=new List<List<double>>();
using (FileStream fs = new FileStream("LST.dat", FileMode.Open, FileAccess.Read))
{
using (BinaryReader px = new BinaryReader(fs))
{
   List<double> list=new List<double>();
   int col=0;
   while(px.BaseStream.Position < px.BaseStream.Length)
   {
     double d=px.ReadDouble();
     Console.WriteLine(d);
     col++;
     list.Add(d);
     if(col % L==0)  {piexl.Add(list);list.Clear();}
   }
   if(list.Count>0) piexl.Add(list);
}
}
更多追问追答
追问
肯定是有710*610个数据的,这个是从lst.dat文件的头文件lst.hdr读取到的大小。就是没有那么多大小,为什么他就在行循环到刚好一半的时候停止了?
追答
你看一下上面的px.BaseStream.Length倒底是多大
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式