try{}把
fs.Seek(54 + 2432 * TotalNum, SeekOrigin.Begin);
fs.Read(Elevations, 0, 1);
TotalNum++;
代码包含起来,看看有没有发生异常吧

解决方案 »

  1.   

    没有发生异常!这个文件的packet的范围是0~4033,直接读第4034个packet的Elevations就是0;先读第4033个packet,通过递增到4034,再读该Elevations就是1;矛盾啊我怀疑是不是FileStream读到文件末尾时自动执行某种机制?
      

  2.   


    只有在到达流的末尾后,Read 方法才返回零。否则,Read 在返回前始终至少从流读取一个字节。如果在调用 Read 之后流中无可用数据,则该方法将一直阻止,直到至少可返回一个字节的数据。即使尚未到达流的末尾,实现仍可以随意返回少于所请求的字节。
    注意:是Read()方法的返回值,所以改为:
    FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite);
           
    do
    {              
    fs.Seek(54 + 2432 * TotalNum, SeekOrigin.Begin);
    //fs.Read(Elevations, 0, 1);
    TotalNum++;
    }
    while(fs.Read(Elevations, 0, 1)!=0)
    应该就对了
      

  3.   

    to lianshaohua(永远深爱一个叫“...”的好女孩儿!) ;
    多谢,这样确实可以了,但还有一点:
    为什么 fs.Read(Elevations, 0, 1)的返回值等于0的时候,Elevations居然还有值且等于1呢?多谢回复
      

  4.   

    只有在到达流的末尾后,Read 方法才返回零。否则,Read 在返回前始终至少从流读取一个字节
    //到达文件尾了,返回0,所以不会再读数据,也就不会为Elevations赋值了,否则赋什么值好呢?空?还是-1?还是...
      

  5.   

    "//到达文件尾了,返回0,所以不会再读数据,也就不会为Elevations赋值"
    本来应该是这样的,但是Elevations确实有值,而且延续了第4033packet的值,这该怎么理解?请详述而且如果直接把该文件读入到一个data[2432*5000]中去,比如:
    fs.Seek(0, SeekOrigin.Begin);
    fs.Read(Data, 0, 2432 * 5000);
    读出第4034个值是0
      

  6.   

    do
    {              
    fs.Seek(54 + 2432 * TotalNum, SeekOrigin.Begin);
    //fs.Read(Elevations, 0, 1);
    TotalNum++;
    }
    while(fs.Read(Elevations, 0, 1)!=0)
    改为:
    do
    {              
    fs.Seek(54 + 2432 * TotalNum, SeekOrigin.Begin);
    Elevations=-1;
    //fs.Read(Elevations, 0, 1);//对Elevations处理的代码
    TotalNum++;
    }
    while(fs.Read(Elevations, 0, 1)!=0)