我现在想要读取一DEM(.txt)文件,内容大致如下文件头
数据部分(高程值(如1539.1))用ReadString()读取了文件头,指针停留在数据部分的开始位置。需要定义一个FileBuf来读取数据//获取整个文件大小,并让文件指针返回开头
ulFullLength = DemFile.GetLength();//ULONGLONG ulFullLength
DemFile.SeekToBegin();然后读取文件头,读取后文件指针位置停留在数据部分的开头ulHeadInfoLength = DemFile.GetPosition();//ULONGLONG ulHeadInfoLength 得到文件开始到数据部分开始之间的长度
ULONGLONG ulDataLength = ulFullLength - ulHeadInfoLength;//数据部分的长度//定义FileBuf
short *DemFileBuf = new short[ulDataLength + 1];//为何加1?文件结尾有什么?
//上面一行产生警告 conversion from 'unsigned __int64' to 'int', possible loss of data
//但short *DemFileBuf = new short[DemFile.GetLength()];就无警告,同样是ULONGLONG型DemFileBuf[ulDataLength] = 0;//设置文件结尾?
DemFile.Seek(ulHeadInfoLength, CFile :: begin);//文件指针跳至数据部分开头
DemFile.Read(DemFileBuf, ulDataLength);//将数据读入缓冲区问题:
1.查MSDN,看GetLength()的返回值类型是ULONGLONG,那为何在short *DemFileBuf = new short[ulDataLength + 1];时会产生警告?若short *DemFileBuf = new short[DemFile.GetLength()];就无警告,都是ULONGLONG的啊
2.在定义DemFileBuf的时候为什么要ulDataLength + 1呢?是读取EOF?文本的EOF是什么字符?
3.DemFileBuf[ulDataLength] = 0;是在设置文件结尾?程序结构是COPY的,按需要做了一些修改,新手+菜鸟麻烦各位了
数据部分(高程值(如1539.1))用ReadString()读取了文件头,指针停留在数据部分的开始位置。需要定义一个FileBuf来读取数据//获取整个文件大小,并让文件指针返回开头
ulFullLength = DemFile.GetLength();//ULONGLONG ulFullLength
DemFile.SeekToBegin();然后读取文件头,读取后文件指针位置停留在数据部分的开头ulHeadInfoLength = DemFile.GetPosition();//ULONGLONG ulHeadInfoLength 得到文件开始到数据部分开始之间的长度
ULONGLONG ulDataLength = ulFullLength - ulHeadInfoLength;//数据部分的长度//定义FileBuf
short *DemFileBuf = new short[ulDataLength + 1];//为何加1?文件结尾有什么?
//上面一行产生警告 conversion from 'unsigned __int64' to 'int', possible loss of data
//但short *DemFileBuf = new short[DemFile.GetLength()];就无警告,同样是ULONGLONG型DemFileBuf[ulDataLength] = 0;//设置文件结尾?
DemFile.Seek(ulHeadInfoLength, CFile :: begin);//文件指针跳至数据部分开头
DemFile.Read(DemFileBuf, ulDataLength);//将数据读入缓冲区问题:
1.查MSDN,看GetLength()的返回值类型是ULONGLONG,那为何在short *DemFileBuf = new short[ulDataLength + 1];时会产生警告?若short *DemFileBuf = new short[DemFile.GetLength()];就无警告,都是ULONGLONG的啊
2.在定义DemFileBuf的时候为什么要ulDataLength + 1呢?是读取EOF?文本的EOF是什么字符?
3.DemFileBuf[ulDataLength] = 0;是在设置文件结尾?程序结构是COPY的,按需要做了一些修改,新手+菜鸟麻烦各位了
解决方案 »
- 一个写线程,10个相同代码的读线程,互斥问题?
- 菜鸟问:怎样设置toolbar按钮可用 ?
- 怎样更换AfxMessageBox的标题?
- 关于主对话框,子对话框
- 请问,怎么样得到屏幕上某点的颜色?
- 今天去微软面试,竟然考了有关Delphi的题,难道微软真的要接收Delphi吗,难道AndersHejlsberg要重新打造Delphi吗
- 高分求助 Visual Studio 6 界面增强工具(1.0) 的下载(50分)
- 怎么做RELEASE版本?
- 有关ActiveX控件的问题
- 请问:我想启动一个程序,程序启动后,如果不移动鼠标,那么该程序就不关闭,一旦移动鼠标,就关闭该程序,不知道这样该如何做
- MFC 位图的插入
- LineLength一段代码
3) 就是给数组赋予结束标志
short是数组指针类型,ULONGLONG的值是长度,这两个有什么冲突?一个字符放在一个Short里,有ULONGLONG个Short
virtual DWORD GetLength( ) const;
throw( CFileException );返回的是DWORD类型,实际就是ULONGLONG,而Short[]里面的值支持的是int,所以才会提示conversion from 'unsigned __int64' to 'int',
short *DemFileBuf = new short[DemFile.GetLength()];//编译时无警告
我的意思是GetLength的返回值也是ULONGLONG型的,为什么就没有产生警告?那也就是说我只能用ULONGLONG *DemFileBuf = new ULONGLONG[DemFile.GetLength()];
[]里面才能放ULONGLONG型的?可这样一来占的内存就太大吧?一个ULONGLONG型的就存了一个字节的东西而已,剩下的全浪费了
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
#ifndef _DWORD_DEFINED
#define _DWORD_DEFINED
typedef unsigned long DWORD;
这样警告就可以消除了,其他地方不用改