Ante todo buen día, hoy traigo una duda que quisiera que me la despejen, , resulta que estoy programando una función en C que reciba ficheros a través de una socket TCP para Windows XP SP2, y estoy utilizando la clase fstream:
Código
unsigned long Recvfile(int *dsock, char buffer[255])//dsock puntero al socket creado { std::string cadena; int len=0,i, llega=0; std::ofstream archivo; for(i=0 ; i<=255 ; i++) //Esto lo que hace es quitar el caracter "!" del { //principio del array buffer es decir bytes[i]=buffer[i+1]; //buffer="!100#nombre" , quedaria if(buffer[i]==0){break;} //bytes="100#nombre" } //(no se me ocurrio otra forma de hacerlo) //luego bytes se reutilizaria para almacenar los //datos que llegan (corregirme si este modo no //es correcto..) cadena=Split(bytes, '#', 0); cadena=Split(bytes, '#', 1); // dir[2]='\\'; archivo.open(dir,std::ios::binary); while(llega!=i) { // if(len==-1){Desconexion(*dsock);break;} la funcion Desconexion no viene al caso len=recv(*dsock, bytes, sizeof(bytes), 0); llega+=len; archivo.write(bytes, len); } archivo.close(); return llega; } //Esta es la funcion Split para que la vean por las dudas que tenga errores std::string Split(std::string buffer, char caracter, int parte) { std::string cad1, cad2; int i; i=buffer.find(caracter); cad1=buffer.substr(0,i); cad2=buffer.substr(i+1,buffer.length()); if(parte==0){return cad1.c_str();}else{return cad2.c_str();} }
Bueno como verán la idea es que se cree en el disco donde está instalado el sistema operativo. Bien, el problema esta en el primer parámeto que le paso a .open(), que sería el path del archivo a crear, no se cómo hacer para que la función me acepte el path que le estoy pasando con la variable dir, he probado de otras formas tmb, con punteros o con las clase string haciendo un .c_str() pero no hay caso, la única forma en la que anda y envía ficheros sin problemas es cuando le paso el parámetro a mano, es decir "C:\\fichero.exe" por ej, lo que no me sirve.
Además, del otro lado (el programa que envía) tengo el mismo problema, sólo me abre el archivo cuando se la paso a mano y nunca pude lograrlo con una variable. El código siempre compila bien, sin errores pero no funciona y la función me pide un const char *, intenté varias veces ya pero me he quedado trabado ahi...
Desde ya muchas gracias y cualquier corrección-crítica constructiva que tengan para hacerme la aceptaré como es debido ya que si se puede mejorar u optimizar código adelante!...