是读取一个文件,但不知道怎么去判断文件结束,读文件代码,我用现在判断最一后一次读出数据是不是为空来解决,但我觉的这个方法不妥,有没有更好的方法, 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);
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);
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,同时后面对文件的操作都可以通过读取字节计数来判断.
不过我变相的把问题给解决了,
通过计读出来的总的文件大小与获取的文件是否相等来解决了,
CloseHandle(hFile);
return;
}
楼主好像在return 前面没有CloseHandle
**********************
else
{
pPicture = NULL;
break;
}*******************************