elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++]System()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++]System()  (Leído 4,666 veces)
Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
[C++]System()
« en: 28 Agosto 2016, 21:38 pm »

Tengo un problema que me esta costando bastante de solucionar.

Tengo un array, con una ruta de un directorio concreto (anteriormente parseado), y lo que pasa es que intento pasar ese parametro a system() con varios comandos y no puedo esto es lo que tengo hasta ahora y he intentado varias veces:
Código
  1. char ruta_final[20]="C:\\Users\\user"; //Realmente la operacion para obtener la ruta es mas complicada
  2.  
  3. system("cd ",ruta_final," && dir"); //Tambien lo he intentado con + en vez de comas
  4.  
  5.  

Se que la variable que se le tiene que pasar por parametro a system tiene que ser de tipo char*, pero no consigo saber como pasar por parametro esos valores.

Tambien e intentado con strings y no funciona. Hay alguna funcion predeterminada para pasar un valor de tipo char a un valor de tipo char*?

Tambien e intentado lo siguiente:
Código
  1. #include <strings>
  2. char ruta_final[20]="C:\\Users\\user"
  3. string comando="cd ",ruta_final," && dir";
  4. system(c_str(comando));
  5.  
Pero tampoco funciona...


Ya que he abierto post, me gustaria saber si hay alguna otra forma de ejecutar comandos de tipo cmd, pero sin usar system para c++??? nose alomejor llamando a alguna dll o algo por el estilo.

Muchas gracias! :P :rolleyes:


En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++]System()
« Respuesta #1 en: 28 Agosto 2016, 21:39 pm »

comando.c_str(). Es un método de clase.


En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: [C++]System()
« Respuesta #2 en: 28 Agosto 2016, 22:25 pm »

comando.c_str(). Es un método de clase.
Ui lo havia hecho asi, nose porque lo puse mal.

Pero sige dando error porque no se puede declarar la string correctamente.

Código
  1. string comando="cd "+ruta_final+" && dir"; //Genera error igualmente
  2.  
  3.  
Alguna idea??
En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++]System()
« Respuesta #3 en: 28 Agosto 2016, 22:30 pm »

ruta_final es char[+. ¿Por qué no trabajas solo con string?

El problema es que estás haciendo char* + char[20] + char*.
Si trabajas con string, será char* + string + char*, y eso será correcto.
En C++, es preferible que trabajes siempre string (salvo casos particulares).
En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: [C++]System()
« Respuesta #4 en: 28 Agosto 2016, 22:48 pm »

ruta_final es char[+. ¿Por qué no trabajas solo con string?

El problema es que estás haciendo char* + char[20] + char*.
Si trabajas con string, será char* + string + char*, y eso será correcto.
En C++, es preferible que trabajes siempre string (salvo casos particulares).
Vale, gracias, lo acabo de solucionar, suelo trabajar con strings, pero al ser una operacion de comparacion de letras preferia usar char.

Ademas pensaba que char*+char+char* era mas copatible que char*+string+char*

Dejo aqui la solucion por si alguien tiene el mismo problema :)

Código
  1. #include <string>
  2. ruta_final[20]="C:\\Users\\user"; //Antes de esto havian varios bucles y operaciones por eso uso char y no strings
  3. string comando_ruta=ruta_final;
  4. string comando="cd "+comando_ruta+" && dir";
  5.  
  6. system(comando.c_str());
  7.  
  8.  

Y referente a la otra duda de usar una alternativa a system() conoces alguna otra opcion??


Gracias de nuevo :rolleyes: ;-)
En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++]System()
« Respuesta #5 en: 28 Agosto 2016, 23:49 pm »

Iba a postearlo antes, pero me dio un error el foro.

ShellExecute, de windows.h

Por ejemplo, para crear un directorio con mkdir:

Código
  1. ShellExecute(NULL, NULL, "cm_d.exe", "/c mkdir \"C:\\directorio\"", NULL, 0);

El tercer argumento es el ejecutable que ejecutar (cmd en este caso). Luego, vienen los parámetros. Si a cmd se le pasa un /c, se le puede poner luego un comando.
El resto de parámetros, míralos en la url si quieres si quieres. Tiene varias opciones.

De todos modos, salvo que <realmente lo necesites>, te diría que utilices system. En primer lugar, porque evitas meterte en funciones que aumentarán la complejidad del código. Y luego, porque así evitas usar las librerías de windows.


NOTA IMPORTANTE: Puse cm_d.exe porque sinó el foro lo detecta como si fuera un ataque, supongo. Quita la barrabaja, '_'
En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: [C++]System()
« Respuesta #6 en: 28 Agosto 2016, 23:55 pm »

Iba a postearlo antes, pero me dio un error el foro.

ShellExecute, de windows.h

Por ejemplo, para crear un directorio con mkdir:

Código
  1. ShellExecute(NULL, NULL, "cm_d.exe", "/c mkdir \"C:\\directorio\"", NULL, 0);

El tercer argumento es el ejecutable que ejecutar (cmd en este caso). Luego, vienen los parámetros. Si a cmd se le pasa un /c, se le puede poner luego un comando.
El resto de parámetros, míralos en la url si quieres si quieres. Tiene varias opciones.

De todos modos, salvo que <realmente lo necesites>, te diría que utilices system. En primer lugar, porque evitas meterte en funciones que aumentarán la complejidad del código. Y luego, porque así evitas usar las librerías de windows.


NOTA IMPORTANTE: Puse cm_d.exe porque sinó el foro lo detecta como si fuera un ataque, supongo. Quita la barrabaja, '_'
Esa funcion estaba mirando precisamente, pero me parece que no me servira, porque segun tengo entendido se ejecuta paralelamente a mi codigo es decir mientras se ejecuta, se sige ejecutando mi codigo, pero yo necesito utilizar el retorno antes que nada, es decir que seguramente me genere errores a la larga.

Pero igualmente muchisimas gracias  :P :silbar: ;-)
En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++]System()
« Respuesta #7 en: 29 Agosto 2016, 00:05 am »

Por hacer, recuerda que no necesitas comandos de consola para hacer nada. TU programa, la api de windows y las librerías de C++ son más que suficientes para valerse por sí mismos.
Engeneral, la api de windows te dará todo lo que necesitas. Hay funciones para todo:
Cambiar el directorio: SetCurrentDirectory
Listar un directorio: FindFirstFile y FindNextFile
Crear carpetas: CreateDirectory

Etc etc
En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: [C++]System()
« Respuesta #8 en: 29 Agosto 2016, 00:15 am »

Por hacer, recuerda que no necesitas comandos de consola para hacer nada. TU programa, la api de windows y las librerías de C++ son más que suficientes para valerse por sí mismos.
Engeneral, la api de windows te dará todo lo que necesitas. Hay funciones para todo:
Cambiar el directorio: SetCurrentDirectory
Listar un directorio: FindFirstFile y FindNextFile
Crear carpetas: CreateDirectory

Etc etc
Lo se, pero en esa funcion lo que queria hacer exactamente era, hacer un dir en cmd, moverme al directorio principal y ejecutar un solo comando mas para listar todos los archivos del sistema.

Con la api de windows seria mucho mas tedioso no? Ademas que ahora mismo lo que me interesa es que pese poquisimo. Y creo que llevarme toda la api para utilizar un par de comandos...
En línea

Curso de ensamblador desde cero
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C++]System()
« Respuesta #9 en: 29 Agosto 2016, 01:15 am »

Por el peso no te preocupes. No va a meter en tu programa toda la api de windows. Solo lo que uses.
Y hablamos de KB por lo general.

Sería más tedioso, pero tendrías más control y harías exactamente lo que tu quisieras.
Pero bueno, si es algo muy simple, no vale la pena. System llega.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
System.net
Programación Visual Basic
David Vans 1 1,407 Último mensaje 3 Marzo 2007, 10:33 am
por <--v1c1ous-->
copiar a system o system 32 « 1 2 3 4 »
Programación Visual Basic
vivachapas 31 13,097 Último mensaje 25 Mayo 2007, 19:06 pm
por vivachapas
Alternatica a conio.h y system("cls"); y system("clear"); ?
Programación C/C++
flacc 5 9,677 Último mensaje 17 Diciembre 2010, 16:55 pm
por flacc
System.Xml.Linq y System.Core « 1 2 »
.NET (C#, VB.NET, ASP)
SγиtαxEяяoя 10 7,603 Último mensaje 23 Junio 2013, 23:50 pm
por Eleкtro
System Informer
Software
B€T€B€ 1 4,272 Último mensaje 13 Marzo 2023, 02:11 am
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines