PDA

Ver la Versión Completa : abrir una consola de windows y que me lleve a un directorio.


crashon182
02-02-2011, 14:51:31
Hola gente ... les hago una consultita acerca de lazarus:

tengo una aplicacion a la que necesito que me posicione en una carpeta de windows lo que realizo es lo siguiente:

en el boton de abrir un archivo

rutaDirectorio:=ExtractFilePath(dialogoabrir.FileName) // me copio el path del archivo.

luego en el botón que deberia ejecutar la consola de windows pongo:

Aprocess:=Tprocess.Create(nil);
Aprocess.CommandLine:='cd '+rutaDirectorio;
Aprocess.Execute;
Aprocess.Free;

luego.. el error que me sale es el siguiente:

Project project1.exe raised exception class 'Eprocess' with message:
Failed to execute cd c:\ :2

desde ya muchas gracias saludos!!

Alexis

mightydragonlor
02-02-2011, 16:00:20
cd c:\ :2 <<<<<< Esto no es ningún programa, como mínimo especificar que se va a abrir el cmd.exe y enviarle los parámetros de ejecución.

crashon182
02-02-2011, 16:33:59
cd c:\ :2 <<<<<< Esto no es ningún programa, como mínimo especificar que se va a abrir el cmd.exe y enviarle los parámetros de ejecución.

Disculpame, y eso como podria hacerlo, es decir enviar los parametros al programa que abro.

saludos!

mightydragonlor
02-02-2011, 16:39:22
es facil

Aprocess:=Tprocess.Create(nil);
Aprocess.CommandLine:='c:\windows\system32\cmd.exe' + ' cd ' + rutaDirectorio;
Aprocess.Execute;
Aprocess.Free;

lo que no entiendo es el que me posicione en una carpeta, ya que lo único que hace este código es abrir el cmd y decirla que le haga un cd a la ruta, nada mas, si lo que quieres es hacerlo con el explorador de carpetas, pues no se hace con cd sino con solo la ruta y no abres el cmd sino el explorer.exe.

crashon182
02-02-2011, 16:55:14
es facil

Aprocess:=Tprocess.Create(nil);
Aprocess.CommandLine:='c:\windows\system32\cmd.exe' + ' cd ' + rutaDirectorio;
Aprocess.Execute;
Aprocess.Free;

lo que no entiendo es el que me posicione en una carpeta, ya que lo único que hace este código es abrir el cmd y decirla que le haga un cd a la ruta, nada mas, si lo que quieres es hacerlo con el explorador de carpetas, pues no se hace con cd sino con solo la ruta y no abres el cmd sino el explorer.exe.

muchas gracias nuevamente, como comentaba en otros post me encuentro realizando un IDe para el lenguaje de programacion de videojuegos BennuGD.
Lo que debo hacer es generar un archivo donde se guarden los errores producidos en el programa que se cree con este ide. segun la documentación de BennuGD esto se puede hacer de la siguiente forma:

bgdc programa.prg > errors.txt

lo que yo hice en lazarus fue:


aprocess.commandLine:='bgdc.exe '+'"'+nombreArchivo+'"'+'>errors.txt'

ese código, asi como esta, no genera el archivo errors.txt, por lo que me fijo manualmente mediante la consola de windows y me doy cuenta que si o si debo ingresar a la carpeta donde se encuentra el archivo .prg para luego ejecutar el comando anteriormente descrito.

1 -por ejemplo ejecute CMD..
2 -luego puse cd c:/ (en este Path se encuentra un programa llamado fenixland4.prg)
3- y luego hice bgdc fenixland4.prg > errors.txt
y ahi si me genero el errors.txt.

saludos!

mightydragonlor
02-02-2011, 20:35:20
Creo que esto te sirve.

process.commandLine:='c:\windows\explorer.exe ' + 'Path que quieres que abra el explorer'

crashon182
03-02-2011, 01:15:53
Creo que esto te sirve.
Código Delphi [-] (http://www.clubdelphi.com/foros/#) process.commandLine:='c:\windows\explorer.exe ' + 'Path que quieres que abra el explorer'



mmm... pero eso me abriría el explorador de windows y yo no necesito que al usuario se le abra la ruta donde ira el archivo en el explorador.
el archivo de error necesito guardarlo porque en el está el numero de linea donde el programador cometio el error en el código (por ejejmplo la falta de un punto y coma), entonces teniendo ese archivo desde el IDE puedo localizar el numero de linea donde cometio el error y marcarsela directamente para que la modifique y no tenga que andar buscando la linea manualmente. es decir que el usuario quizás ni se entere que se genera un archivo llamado errors.txt, ese archivo es para uso interno del IDE que me encuentro desarrollando.

muchas gracias por la predisposición para responder preguntas y disculpa si no me hago entender bien ;)

saludos!

mightydragonlor
03-02-2011, 14:56:45
perfecto, lo que puedes hacer es un FileExist, si el archivo existe lo cargas en un TFIleStream, así puedes cargar la línea de error y guardarla donde deseas.

PD. el FileExist es una funcion que te dice si el archivo existe o nó en cierto directorio.

crashon182
03-02-2011, 17:57:35
perfecto, lo que puedes hacer es un FileExist, si el archivo existe lo cargas en un TFIleStream, así puedes cargar la línea de error y guardarla donde deseas.

PD. el FileExist es una funcion que te dice si el archivo existe o nó en cierto directorio.

Hola Mighty gracias por la paciencia ;) te comento .. el archivo errors.txt no existe hasta que no lo cree presionando el botón compilar (con lo cual no seria necesario utilizar fileExist). Una vez que lo cree (esto ocurre luego de presionar el botón compilar) ahí si utilizaria una funcion para leer el archivo y traer lo que necesito. El problema es ese .. que presiono el botón compilar y no crea el archivo en cuestion.

para mas información arme un tema de nombre [Proyecto] RAMSES IDE donde esta la descarga y el SRC, el único problema es que el foro no me deja colocar links asi que no pude poner las descargas... pero en cuanto pueda lo voy a subir.

saludos! y muchas gracias!
Alexis

mightydragonlor
04-02-2011, 14:22:29
vale, apenas tenga tiempo paso y reviso el código ;)