Hola a todos:
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:
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!...
Ante todo buen día, hoy traigo una duda que quisiera que me la despejen,

Código (c) [Seleccionar]
unsigned long Recvfile(int *dsock, char buffer[255])//dsock puntero al socket creado
{
std::string cadena;
char bytes[1024],*a=getenv("SystemDrive"), dir[20]={0};
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);
i=atoi(cadena.c_str()); //esta variable i contendra el tamaño del archivo que llegara
cadena=Split(bytes, '#', 1);
strcat(dir,a);
// dir[2]='\\';
strcat(dir,cadena.c_str());
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!...