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]); } } } 展开
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]); } } } 展开
展开全部
象你这种无法确认文件大小的,就不要去用按数组的大小去读取文件,否则如果你的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倒底是多大
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询