Allora lato server invio il file:
codice:
char      buffer[4096];
   DWORD     dwRead;
   
   /*Invio del nome del file*/
   h = FindFirstFile(temp,&fd); 
   if(h == INVALID_HANDLE_VALUE){
    /*Se il file indicato non esiste*/
    send(s,END_ERROR,5,0);
    return CONNECTED;
   }
   send( s, fd.cFileName, MAX_PATH, 0 );
   
   /*Invio del file*/
   h = CreateFile(temp,GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, 0, NULL);
   if(h != INVALID_HANDLE_VALUE)
      {      
       dwRead=0;
       while ( ReadFile(h, buffer, sizeof(buffer), &dwRead, NULL) )
       {
        if ( dwRead > 0 )send(s, buffer, dwRead, 0);
        else  break;
       }   
      Sleep(2000);
      send(s,END_NO_ERROR,5,0);
   }
   CloseHandle(h);
Quando il file è finito invio una certa stringa (che io ho qui indicato con END_NO_ERROR).
Lato client lo salvo, questo metodo è chiamato in modo iterativo, ad ogni ricezione del buffer controllo, se la stringa non equivale a END_NO_ERROR allora chiamo il metodo:
codice:
bool download(){
/*Sta ricevendo il file richiesto*/             
 if(newFile==true){
 /*Se è un nuovo file crealo*/
  lstrcpy(charbuff,szDir);
  lstrcat(charbuff,recvbuf);
  hFile = CreateFile(charbuff,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);        
  newFile=false;  //Il file è stato creato
  return false;   //La creazione del file non deve essere vista come ricezione di byte
 }
 /*Scrivi sul file*/
 if(WriteFile(hFile,recvbuf,sockByte,&dw,NULL)==0){
   wsprintf(charbuff,"Errore in scrittuta numero %i",GetLastError());
   return false;
   }
 /*Incrementa l'indice del file su cui scrivi*/ 
 else return true;
}
Mi spiace tanto che questi metodi sono tirati fuori da un mio programma e quindi possono risultare confusi....spero comunque ti siano di un qualche aiuto.