Autor
|
Tema: [C++]System() (Leído 4,646 veces)
|
Poyoncio
|
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: char ruta_final[20]="C:\\Users\\user"; //Realmente la operacion para obtener la ruta es mas complicada system("cd ",ruta_final," && dir"); //Tambien lo he intentado con + en vez de comas
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: #include <strings> char ruta_final[20]="C:\\Users\\user" string comando="cd ",ruta_final," && dir"; system(c_str(comando));
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!
|
|
|
En línea
|
Curso de ensamblador desde cero
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
comando.c_str(). Es un método de clase.
|
|
|
En línea
|
|
|
|
Poyoncio
|
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. string comando="cd "+ruta_final+" && dir"; //Genera error igualmente
Alguna idea??
|
|
|
En línea
|
Curso de ensamblador desde cero
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
|
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 #include <string> ruta_final[20]="C:\\Users\\user"; //Antes de esto havian varios bucles y operaciones por eso uso char y no strings string comando_ruta=ruta_final; string comando="cd "+comando_ruta+" && dir"; system(comando.c_str());
Y referente a la otra duda de usar una alternativa a system() conoces alguna otra opcion?? Gracias de nuevo
|
|
|
En línea
|
Curso de ensamblador desde cero
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Iba a postearlo antes, pero me dio un error el foro. ShellExecute, de windows.h Por ejemplo, para crear un directorio con mkdir: 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
|
Iba a postearlo antes, pero me dio un error el foro. ShellExecute, de windows.h Por ejemplo, para crear un directorio con mkdir: 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
|
|
|
En línea
|
Curso de ensamblador desde cero
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
|
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
Mensajes: 3.412
ASMático
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
System.net
Programación Visual Basic
|
David Vans
|
1
|
1,399
|
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,027
|
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,649
|
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,570
|
23 Junio 2013, 23:50 pm
por Eleкtro
|
|
|
System Informer
Software
|
B€T€B€
|
1
|
4,212
|
13 Marzo 2023, 02:11 am
por ThunderCls
|
|