Programación General > C/C++
ruta ftp en ++
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
[#] Página Siguiente
Ir a la versión completa