是读取一个文件,但不知道怎么去判断文件结束,读文件代码,我用现在判断最一后一次读出数据是不是为空来解决,但我觉的这个方法不妥,有没有更好的方法, DWORD NumberOfBytesRead ; HANDLE filehandle = ::CreateFile( pathName, GENERIC_READ, FILE_SHARE_READ, NULL, lpSecurityAttributes, 
OPEN_EXISTING,  
FILE_ATTRIBUTE_NORMAL, NULL ); 
            int m;  GraphicsItem * pPicture = new GraphicsItem;   ///GraphicsItem自定义一个结构体
m=m_pitemlist.GetCount();  while(pPicture!=NULL)
  {
  int Type;
  BOOL bEnable;
  BOOL bBKFlag;
  int row;
  int List;
  int nstrAttriLen;

  m = ReadFile(filehandle, &Type, sizeof(int), &NumberOfBytesRead, NULL );
  m = ReadFile(filehandle, &List, sizeof(int), &NumberOfBytesRead,NULL );
  m = ReadFile(filehandle, &row, sizeof(int), &NumberOfBytesRead,NULL );
  m = ReadFile(filehandle, &bEnable, sizeof(int), &NumberOfBytesRead,NULL );
  m = ReadFile(filehandle, &bBKFlag, sizeof(int), &NumberOfBytesRead,NULL );
  m = ReadFile(filehandle, &nstrAttriLen, sizeof(int), &NumberOfBytesRead,NULL );
 
  int nLeng = nstrAttriLen;
  TCHAR *lpsz = new TCHAR[nLeng+1];
  m = ReadFile(filehandle, lpsz,(nLeng+1)*2 , &NumberOfBytesRead,NULL );
  pPicture->Type =Type;
  pPicture->List = List;
  pPicture->row = row;
  pPicture->bEnable = bEnable;
  pPicture->bBKFlag = bBKFlag;
  pPicture->nstrAttriLen = nstrAttriLen;
  pPicture->strAttri = lpsz;
 
  delete []lpsz;
  if (NumberOfBytesRead>0)
  {
  m_pitemlist.AddTail(pPicture);
  }
  else
  {
  pPicture = NULL;
  break;
  }
  }
  CloseHandle(filehandle);

解决方案 »

  1.   

    能不能具体说明一下,不是GetFilePointer()?
      

  2.   

    去查msdn,对ReadFile的返回值有明确的介绍。
      

  3.   

    var
      dwCurrentPosition, dwFileSize: DWORD;
    dwCurrentPosition := SetFilePointer(hFile,0,Nil,FILE_CURRENT);//取得当前的位置
    dwFileSize:= SetFilePointer(hFile,0,Nil,FILE_END);//取得文件大小
    SetFilePointer(hFile,dwCurrentPosition ,Nil,FILE_BEGIN);//恢复位置判断dwCurrentPosition 和 dwFileSize,同时后面对文件的操作都可以通过读取字节计数来判断.
      

  4.   

    就是因为都读到文件结束了,但是RealFile的返回值还是1,
    不过我变相的把问题给解决了,
    通过计读出来的总的文件大小与获取的文件是否相等来解决了,
      

  5.   

    另外如果确实需要取完整个文件的话,只需要当ReadFile失败之后,判断GetLastError = ERROR_HANDLE_EOF
      

  6.   

    if (m && NumberOfBytesRead == 0)//判断读文件结束
        CloseHandle(hFile);
        return;
    }
    楼主好像在return 前面没有CloseHandle
    **********************
    else
                 {
                     pPicture = NULL;
                     break;
                 }*******************************