二进制文件读取?

long7411 2009-12-24 09:35:37
有一二进制文件格式如下:

typedef struct tagGridDataFileHeader
{
short nDataType; //资料类型,2个字节
CTime tSourceDataStartTime;//源数据的开始时间信息,对于预报结果文件,该值是最后一个实测数据的开始时间信息,4个字节
CTime tSourceDataEndTime;//源数据的结束时间信息,对于预报结果文件,该值是最后一个实测数据的开始时间信息,4个字节
int nMinutes;//预警时间长度信息(分钟),对于实测数据,该值为0,4个字节
float fGridDataLeftLongitude;//左边的经度(度),4个字节
float fGridDataTopLatitude;//上边的纬度(度),4个字节
float fGridDataCenterLongitude;//中心经度(度),4个字节
float fGridDataCenterLatitude;//中心纬度(度),4个字节
float fGridDataDeltaX;//横向格距(KM),4个字节
float fGridDataDeltaY;//纵向格距(KM),4个字节
int nGridDataXNum;//横向格点数,4个字节
int nGridDataYNum;//纵向格点数,4个字节
short nType;//产品的类型,2个字节,0为实测数据的格点化产品,1为预警产品
float fTemp[10];//备用数据,40个字节


}

我现在想把它一一读出显示在文本中,我试按以下写,却写不下去,该怎么写?谢谢了!

string StrTxtFileName = @"F:\DFPP200909221610.DAT";
FileStream fs = new FileStream(StrTxtFileName, FileMode.Open);
BinaryReader rdr = new BinaryReader(fs);

Console.WriteLine(rdr.ReadUInt16().ToString());//读nDataType数据
//读时间数据???tSourceDataStartTime
//fs.Position += 10;


fs.Dispose();
fs.Close();
rdr.Close();
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxg99 2009-12-25
  • 打赏
  • 举报
回复
路过,顶了!
关键是cTime的类型信息。如果知道可以计算数据个数,利用循环按照字节读取,存储或显示!
zjx311989 2009-12-24
  • 打赏
  • 举报
回复
帮顶吧.. 看高手..
long7411 2009-12-24
  • 打赏
  • 举报
回复
把对象设为可序列化。把对象序列化后保存为文件,读取的时候反序列化就好了,说详细点好吗?
dqw120 2009-12-24
  • 打赏
  • 举报
回复
这样的话,建议你把对象设为可序列化。把对象序列化后保存为文件,读取的时候反序列化就好了。
ProjectDD 2009-12-24
  • 打赏
  • 举报
回复
public void Run() {
string path = @"F:\DFPP200909221610.DAT";
FileStream fs = File.Open(path , FileMode.OpenOrCreate , FileAccess.Read);
byte[] datacatch;
using (BinaryReader br=new BinaryReader(fs)) {
datacatch=br.ReadBytes((int)fs.Length);
}

Console.WriteLine(Encoding.Default.GetString(datacatch));//读nDataType数据
//读时间数据???tSourceDataStartTime
//fs.Position += 10;
}

//先做到这步
long7411 2009-12-24
  • 打赏
  • 举报
回复
C#怎么读取?
silentwins 2009-12-24
  • 打赏
  • 举报
回复
m_begintime=CTime(2004,1,1,0,0,0,-1);//参数依次为year,month,day,hour,minite,second
m_endtime =CTime::GetCurrentTime();//当前时间
long7411 2009-12-24
  • 打赏
  • 举报
回复
CTime类怎么读取?
Return门徒 2009-12-24
  • 打赏
  • 举报
回复
???问题说明白了,怎么写不了了~!
tzs2304 2009-12-24
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
知道字节长度了还不好搞?
读出来:

byte[] bytes=new byte[88];//文件读取出来的字节放在这里

然后可以分别处理
如:
short m = BitConverter.ToUInt16(bytes, 0);//从数组索引0处开始读2个字节转换成uint16

float f = BitConverter.ToSingle(bytes, 33);//从33字节处读取4个字节转换成单浮点数
标准的值类型都能用BitConverter读取
至于Ctime要知道其定义才可以(关于字节排列先后顺序的)

你试试吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧