Programación General > C/C++

 ruta ftp en ++

(1/2) > >>

winnipu:
Hola a todos, es mi primer mensaje y quiero plantear la siguiente duda:

Vereis estoy haciendo un programa en c++ que se conecte a un ftp y descargue un archivo firewall.log en mi pc. Pero no quiero que lo descargue en cualquier carpeta sino en por ejemplo system32. Como la ruta cambia en cada pc, y en los distintos sistemas operativos, xp, win7, vista. He pensado que la mejor manera de hacerlo con una variable de entorno como %systemroot% si bien no se como implementarla porque por mas que lo intento meter en ftpgetfile, incluso con un getenv no logro resultados. Os pego el codigo que tengo a ver si alguien puede decirme como solucionarlo:


--- Código: C++ ---#include <windows.h>#include <wininet.h> #define RARCHIVO "firewall.log"#define LARCHIVO "%SYSTEMROOT%\system32\firewall.log" int main(){  HINTERNET hInternet, hServer;  hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);  hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "cosas", "xxxxxxxxx", INTERNET_SERVICE_FTP, 0, 0);  FtpGetFile(hServer, RARCHIVO, LARCHIVO, (int)NULL, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);  InternetCloseHandle(hInternet);  InternetCloseHandle(hServer);  return 0;} 

m0skit0:
La mejor forma es pasárselo como parámetro al programa. Recuerda que el prototipo de main es


--- Código: C++ ---int main(int argc, char* argv[]) En mi opinión, esto deberías programarlo con un lenguaje de scripts en vez de C++, pero sólo es una opinión.

Saludos.

winnipu:
Gracias M0skit0. Si, se que mejor con scripts, pero es que estoy aprendiendo c++, y quisiera resolver esa duda en c++.
Osea que dices dejar el programa asi?


--- Código: C++ ---     #include <windows.h>    #include <wininet.h>         #define RARCHIVO "firewall.log"    #define LARCHIVO "%SYSTEMROOT%\system32\firewall.log"        int main(int argc, char* argv[])   {      HINTERNET hInternet, hServer;     hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);     hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "cosas", "xxxxxxxxx", INTERNET_SERVICE_FTP, 0, 0);     FtpGetFile(hServer, RARCHIVO, LARCHIVO, (int)NULL, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);     InternetCloseHandle(hInternet);     InternetCloseHandle(hServer);        return 0;   } 

alb:
Holà,

--- Cita de: "m0skit0" ---La mejor forma es pasárselo como parámetro al programa. Recuerda que el prototipo de main es


--- Código: C++ ---int main(int argc, char* argv[]) 
--- Fin de la cita ---

--- Código: C++ ---int main()  y
--- Código: C++ ---int main(int argc, char* argv[])  son los dos prototipos vàlidos en C++ (ISO/IEC 14882:2003, 3.6.1 Main function)


--- Código: C++ ---int main(void)  y
--- Código: C++ ---int main(int argc, char *argv[])  son los dos prototipos vàlidos en C (ISO/IEC 9899:1999,5.1.2.2.1 Program startup)

winnipu:
Os referis a que deberia ser algo asi:


--- Código: C++ ---     #include <windows.h>    #include <wininet.h>         #define RARCHIVO "firewall.log"            int main(int argc, char* argv[])   {     char *pPath = getenv("SystemRoot");      HINTERNET hInternet, hServer;     hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);     hServer = InternetConnect(hInternet, "ftp.usuarios.hispa.es", INTERNET_DEFAULT_FTP_PORT, "cosas", "xxxxxxxxx", INTERNET_SERVICE_FTP, 0, 0);     FtpGetFile(hServer, RARCHIVO, pPath, (int)NULL, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);     InternetCloseHandle(hInternet);     InternetCloseHandle(hServer);        return 0;   } 

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa