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.