我现在想要读取一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的,按需要做了一些修改,新手+菜鸟麻烦各位了

解决方案 »

  1.   

    1)short 哪里等于 ULONGLONG 啊ULONGLONG  *DemFileBuf = new ULONGLONG[DemFile.GetLength()];2) 加一是为了数组结尾赋值'\0'
    3)  就是给数组赋予结束标志
      

  2.   

    short *DemFileBuf = new short[ulDataLength + 1];
    short是数组指针类型,ULONGLONG的值是长度,这两个有什么冲突?一个字符放在一个Short里,有ULONGLONG个Short
      

  3.   

    CFile::GetLength 
    virtual DWORD GetLength( ) const;
    throw( CFileException );返回的是DWORD类型,实际就是ULONGLONG,而Short[]里面的值支持的是int,所以才会提示conversion from 'unsigned __int64' to 'int',
      

  4.   

    short *DemFileBuf = new short[ulDataLength + 1];//产生警告 conversion from 'unsigned __int64' to 'int', possible loss of data
    short *DemFileBuf = new short[DemFile.GetLength()];//编译时无警告
    我的意思是GetLength的返回值也是ULONGLONG型的,为什么就没有产生警告?那也就是说我只能用ULONGLONG *DemFileBuf = new ULONGLONG[DemFile.GetLength()];
    []里面才能放ULONGLONG型的?可这样一来占的内存就太大吧?一个ULONGLONG型的就存了一个字节的东西而已,剩下的全浪费了
      

  5.   

    #if defined(_MAC) && defined(_MAC_INT_64)
    typedef __int64 LONGLONG;
    typedef unsigned __int64 ULONGLONG;
    #ifndef _DWORD_DEFINED
    #define _DWORD_DEFINED
    typedef unsigned long DWORD;
      

  6.   

    谢谢您这么耐心的给我讲但我真的不知道该怎么定义了眼下就卡在这里了因为我的文本是一个相当大的高程值矩阵(.txt文件有6MB左右),麻烦帮我改一下下面的语句吧!让它不出现警告单位要尽可能的小,因为每个单位就装一个字符,长度要尽可能的大,因为字符太多了short *DemFileBuf = new short[ulDataLength + 1];如果用ULONGLONG *DemFileBuf = new ULONGLONG[DemFile.GetLength()];我实在不知道会占用多大内存,会不会程序直接卡死了
      

  7.   

    unsigned long ulDataLength = ulFullLength - ulHeadInfoLength;//数据部分的长度
    这样警告就可以消除了,其他地方不用改