Ciao...
il mio problema sta nella ricezione di un file inviato, più specificamente di un DataBase Access (.mdb).
Utilizzo una connessione con i Socket e nel Client faccio :
Oltre al Buffer (che e il contenuto del file) invio anche il contenuto della variabile FileSize che è la dimensione del file, così che nel Server faccio:codice:SOCKET ServerContattoFile = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in ServiceContattoFile; char buffer[1000000]=""; struct stat statbuf; FILE *file; file=fopen(DataBase.c_str(),"r+"); fstat(fileno(file), &statbuf); fgets(buffer,statbuf.st_size,file); String FileSize=statbuf.st_size; fclose(file); ServiceContattoFile.sin_family = AF_INET; ServiceContattoFile.sin_addr.s_addr = inet_addr(IP.c_str()); ServiceContattoFile.sin_port = htons(10010); connect(ServerContattoFile,(SOCKADDR*)&ServiceContattoFile,sizeof(ServiceContattoFile)); send(ServerContattoFile,buffer,statbuf.st_size, 0);
Magari non e molto chiaro pero il problema sta nel fatto che il buffer arriva ed e uguale a quello inviato dal server, infatti il file viene creato correttamente e andamdo sulle sue proprieta da windows risulta avere le stesse dimensioni di quello originale, però se lo apro anche con access mi dice che non e un Database riconoscito, e non mi apre niente.codice:char buffer[1000000]; Socket->ReceiveBuf(buffer,FileSize); bool newFile=true; HANDLE hFile; DWORD dwWrite=FileSize; String DataBase=ROOTDIR+"DB.mdb"; if(newFile==true) { hFile = CreateFile(DataBase.c_str(),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL); newFile=false; } if(WriteFile(hFile,buffer,FileSize,&dwWrite,NULL)==0) ShowMessage("Errore di scrittura File.!"); FileClose((int)hFile);
Cosa puoi essere? la dimensione e sempre inferiore a 1000000 byte (1Mb) data dal valore nella variabile FileSize come quello del file inviato.
Grazie a chi mi sa dare una mano...


Rispondi quotando