MSDNには「ファイルのサイズを返します。」としか書いてないが、実は今読める分のサイズが返ってくるだけで、必ずしもファイルサイズを表してるわけではない。
なので返ってくる値が0になるまで繰り返し読み込む必要がある
CInternetFile *p_if_obj; p_if_obj = m_ftpConP->OpenFile(pstrRemoteFile); if( NULL == p_if_obj ){ return FALSE; } long total_size = 0; while(1){ long size = (long)p_if_obj->GetLength(); if( 0 == size ){ break; } if( max_size < (total_size+size) ){ return FALSE; } if( NULL == p_if_obj->Read((char*)p_out+total_size,size) ){ m_ftpConP->Close(); return FALSE; } total_size += size; } m_ftpConP->Close();
ネタ元